黑马程序员技术交流社区
标题:
C语言数组a与&a的区别
[打印本页]
作者:
JiangHG
时间:
2015-3-13 22:03
标题:
C语言数组a与&a的区别
先看代码:
int main()
{
int a[5] = {1,2,3,4,5};
int *ptr1 = (int *)(&a+1);
int *ptr2 = (int *)(a +1);
printf ("*ptr1 = %d *ptr2=%d",*ptr1,*(ptr2-1));
}
要想搞明白程序输出结果就必须搞明白两个问题
1. a与&a的区别
a 与 &a值是一样的,但表达的意思不一样,a是数组首元素的地址即a[0]元素的地址,而&a整个数组的首地址
2.指针的加减操作
一个类型为t的指针的移动是以sizeof(T)为移动单位,所以 a+1的移动单位是sizeof(a[0])就指向了数组下一个元素的地址即a[1]的地址,(&a+1)的移动单位是5*sizeof(int)就指向了“a[5]”显然已越过了数组界限,而ptr2移动单位是sizeof(int),它向前移动一个单位就正好指向了a[4]
经过以上分析:程序运行结果为 *ptr1 = 2 *ptr2 = 5
作者:
舒少勇
时间:
2015-3-17 08:10
明白了 谢谢
作者:
yafengxn
时间:
2015-3-17 09:28
总结的不错
作者:
梦想中前行
时间:
2015-3-17 09:57
不错哦。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2