黑马程序员技术交流社区
标题:
有关于&???
[打印本页]
作者:
马志华
时间:
2014-12-16 19:44
标题:
有关于&???
#include <stdio.h>
int main()
{
char cs[5]={'a','A','B','D','f'};
printf("%p\n",cs);
for (int i =0; i<5; i++) {
printf("cs[%d]的地址是:%p\n",i,&cs[i]);
}
return 0;
}
复制代码
为什么printf("%p\n",cs);不用加&就能输出地址;而 printf("cs[%d]的地址是:%p\n",i,&cs
);要加&才能输出地址?
作者:
马志华
时间:
2014-12-16 19:47
我又试了一下,printf("%p\n",cs);加不加&都能输出地址;而 printf("cs[%d]的地址是:%p\n",i,&cs);必须加&才能输出地址,求大神指教!!!
作者:
花轮
时间:
2014-12-16 20:30
我记得mj大神视频好像有说过 数组传的本来就是地址 你可以再看一下那节
作者:
sajiner2
时间:
2014-12-16 20:46
编程语言就是约定一些规则很多时候没有为什么,方便理解、方便记忆就可以了吧。
比如楼主的问题,第一个是(&cs)而第二个(&cs[i]),第二个是值得cs数组的第i个元素的地址,是吧cs[i]看做一个整体然后再结合&的。
作者:
马志华
时间:
2014-12-16 20:51
受教了,谢谢给位
作者:
从今以后
时间:
2014-12-16 21:42
printf("%p\n",cs); // 0x7fff5fbff7a3 输出数组地址 == 数组首元素地址 指向char类型的指针
printf("%p\n",cs + 1); // 0x7fff5fbff7a4 比上个地址多了1 和char占一字节相符
printf("cs[%d]的地址是:%p\n",i,&cs[i]); // 输出数组元素地址 不加&则是把cs[i]存的值以%p输出,即把'a' == 97 以十六进制形式输出:0x61。
&cs,得到的是“指向数组的指针“,是指向“有5个元素的char数组”类型的指针。指针+1后移动了5个位置。
printf("%p\n",&cs); // 0x7fff5fbff7a3
printf("%p\n",&cs + 1); // 0x7fff5fbff7a8
其实p1 = &cs 和 p2 = cs 两种指针值一样,只是类型不同。
百度了下了解到这么个事:在C中, 在几乎所有使用数组的表达式中,数组名的值是个指针常量,也就是数组第一个元素的地址。 它的类型取决于数组元素的类型。但有两种特例,数组名并不是用指针常量来表示,1.sizeof;2.&。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2