黑马程序员技术交流社区
标题:
对于数组首地址和数组名取地址中间的一些细节不太明白
[打印本页]
作者:
dongqing
时间:
2015-10-29 13:15
标题:
对于数组首地址和数组名取地址中间的一些细节不太明白
int a[8]={12,34,56,78,90};
printf("%p\n %p\n", a, &a);
printf("%d\n %d\n", sizeof(a), sizeof(&a+1));
printf("%p\n %p", a+1, &a+1);
getch();
中sizeof(&a+1);输出为什么是4呢?
作者:
维维轩
时间:
2015-10-29 13:37
int类型的指针占4个字节所以是4
作者:
谁在放荡
时间:
2015-10-29 16:21
这个与操作系统有关吧,32位是4,64为是8。&a+1表示的是个地址,所以地址占的字节数与定义的类型无关。即使换成char,它的输出依然不变,我的理解就是这样
作者:
c9527
时间:
2015-10-29 18:36
谁在放荡 发表于 2015-10-29 16:21
这个与操作系统有关吧,32位是4,64为是8。&a+1表示的是个地址,所以地址占的字节数与定义的类型无关。即使 ...
这个说的对,它只是个指针,输出的是指针在内存中占用的空间。
作者:
tsc0000
时间:
2015-10-29 18:51
典型的C语言问题,建议你看看潭浩强的“C程序设计”,你这里a是一个数组的首地址,它和&a[0],表示的一样,你这里在a之前又加了个取地址符,&a 它就变成了二维数组,&a,表示二维数组中第一行的首地址,而&a + 1则是二维数组中的第二行的首地址,对地址用sizeof,要看你的os是多少位的了,32就是4,64位的就是8,你的结果是4,那你的OS应该是32位的,如果不是还有一个原因就是编译器的问题,这个问题我在用VC6.0(32位编译器)的时候碰到过,你可以去试试
作者:
StillSad
时间:
2015-10-30 07:52
来这里看看http://blog.csdn.net/draw5230/article/details/6699431
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2