int* a= b;
int *a=b是说把b的值赋值给指针a(*a), int*a=&b是说让指针a(*a)指向b的地址。
举个例子说:
int b=5,c=9
int *a1=b;----------------------1
int *a2=&b;_____________________2
b=c;-------------------------3
这个时候*a1=5,*a2=9 。因为在说第一步时已经把b的值,也就是5传给*a1,所以*a1=5 。在第二步时,把b的地址,也即是&b传给了*a2,这个时候*a2=5 。
但是在第三步时,b的值变成了c的值,也就是9,我们知道这个时候 b的地址早就传给*a2了,所以,*a2和这个时候的b的值是一样的, 即*a2=9。
扩展资料:
(*p)操作是这样一种运算,返回p 的值作为地址的那个空间的取值。(&p)则是这样一种运算,返回当时声明p 时开辟的地址。显然可以用赋值语句对内存地址赋值。
假设有这么一段代码:(假设开辟空间时p 被分配给了3001H、3002H 两个位置)
int *p;p=2003H;*p=3000H,**p的值为多少?
**p=*(*(p))=*(*(2003H))=*(3000H)=3000H。
那么&&p、*(&p)和&(*p)又等于多少?
&&p=&(&(p))=&(3001H),此时出错了,3001H 是个常数怎么可能有地址呢?
*&p=*(&(p))=*(3001H)=2003H,也就是*&p=p。
&*p=&(*p)=&(3000H)=2003H,之前有人认为这个是不成立的,实际上&(3000H)是求存储3000H这个变量所在的内存地址,仍然是p的值。下面的代码是个很简单的例子:
#include<iostream>
using namespace std;//环境vc6.0int main(){int *a;a=(int*)5;cout<<(unsigned int)&*a<<endl;}
输出的结果为5
参考资料:指针_百度百科