- 错误理解:如果int a[5], 那么a与&a是等价的,因为两者地址相同。
解答:一定要注意a与&a是不一样的,虽然两者地址相同,但意义不一样,&a是整个数组对象的首地址,而a是数组首地址,也就是a[0]的地址,a的类型是int[5],a[0]的类型是int,因此&a+1相当于a的地址值加上sizeof(int) * 5,也就是a[5],下一个对象的地址,已经越界了,而a+1相当于a的地址加上sizeof(int),即a[1]的地址。
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int *p = &(a + 1)[3]; printf("%d\n", *p);
输出:5
说明:因为a+1指向a的第二个元素,[3]表示再向后移动3个元素。
出处:http://www.cnblogs.com/lanxuezaipiao/p/4127904.html
出处:http://www.cnblogs.com/lanxuezaipiao/p/4127904.html