*a与&a的区别。。

最近看书看的直蒙,书上这样解释,p=&a,把a的地址赋给p. p=8a,把a所指存储单元的内容赋给p. 请问这俩有什么区别吗,举其它例子也行。

如果单纯int *a和int a[]的区别的话,int *a为指向一个整形的指针。而int a[]为一个整形数组,而数组名为其第一个元素的首地址,他们一个是形参,一个是实参,形参指向实参的地址,上面的程序错了,和这两个参数没关系,将Fun含数的第二行改为for (i=0; i<n-1; i+=1)即可实现从大到小的排序。
1.
声明的时候不同
int *a; //没有给a分配地址 野指针
int a[5]; //a已经是数组的首地址了
2.
指针是变量 数组名是常量
int a[5];
int *p=a;

你是可以p+1,a+1 而且他们等效 ,
其他都一样, 本质就是储存地址 根据其类型算出偏移量进行偏移( 也就是p+几 )
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-08-02
从基础讲

第一,指针就是地址
第二,指针变量是用来专门储存 其他变量的 地址 的变量
指针变量p的值是变量a的地址
而指针运算符“ * ”是为了表示指针变量和它所指的变量之间的关系
*p等价于变量a,就是说比如 int a=3; p=&a; 当输出*p的值为a的值也就是3;
也就是说程序中赋值过程的a=3;与*p=3;是等同的
p=&a;是使p这个指针变量指向a,因为我们要把键盘输入端的字符存到变量a所在的存储空间,而不是变量a存储的数据所指向的内存空间~所以写做scanf("%d",&a);// ”&“是以一个操作符,可以获取变量a所在的存储空间位置,而不是变量a所在存储空间中存储的数据.也就是所谓的地址=指针
而你所说的把(某指针变量)所指存储单元的内容赋给(变量)这种功能的表达式应该是
(某变量)=*(某指针变量)举例: b=*a
也就是比如
变量a=3 a的地址(指针)为1000;
p=&a 就是指针变量p的值变为变量a的地址,也就是1000;此时的p 是指针变量
p=*a 就是把变量a的值3赋给变量p,也就是p=3; 此时的p是变量而不是指针变量
第2个回答  2014-01-03
a=30H a的地址为50H
p=&a 把a的地址给p 那么可以得到p的值=50H
p=*a 把a的内容给p 那么可以得到p的值为30H
第3个回答  2014-01-03
*a表示值,&a表示地址