A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

dongqing

中级黑马

  • 黑马币:

  • 帖子:

  • 精华:

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呢?

5 个回复

倒序浏览
int类型的指针占4个字节所以是4
回复 使用道具 举报
谁在放荡 来自手机 中级黑马 2015-10-29 16:21:12
藤椅
这个与操作系统有关吧,32位是4,64为是8。&a+1表示的是个地址,所以地址占的字节数与定义的类型无关。即使换成char,它的输出依然不变,我的理解就是这样
回复 使用道具 举报
谁在放荡 发表于 2015-10-29 16:21
这个与操作系统有关吧,32位是4,64为是8。&a+1表示的是个地址,所以地址占的字节数与定义的类型无关。即使 ...

这个说的对,它只是个指针,输出的是指针在内存中占用的空间。
回复 使用道具 举报
典型的C语言问题,建议你看看潭浩强的“C程序设计”,你这里a是一个数组的首地址,它和&a[0],表示的一样,你这里在a之前又加了个取地址符,&a 它就变成了二维数组,&a,表示二维数组中第一行的首地址,而&a + 1则是二维数组中的第二行的首地址,对地址用sizeof,要看你的os是多少位的了,32就是4,64位的就是8,你的结果是4,那你的OS应该是32位的,如果不是还有一个原因就是编译器的问题,这个问题我在用VC6.0(32位编译器)的时候碰到过,你可以去试试
回复 使用道具 举报
来这里看看http://blog.csdn.net/draw5230/article/details/6699431
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马