读书人

关于数组名和指针的有关问题

发布时间: 2012-04-06 12:22:24 作者: rapoo

关于数组名和指针的问题

C/C++ code
int a[5] = {1, 2, 3, 4, 5};int *p = (int *)(&a + 1);printf("%d\n%d\n", *(a + 1), *(p - 1));


问下,这个 &a + 1 到底移动了几个字节?


[解决办法]
探讨
C/C++ code
int a[5] = {1, 2, 3, 4, 5};
int *p = (int *)(&a + 1);
printf("%d\n%d\n", *(a + 1), *(p - 1));


问下,这个 &a + 1 到底移动了几个字节?

[解决办法]
移动了sizeof(a)个字节,即20个字节···
探讨
C/C++ code
int a[5] = {1, 2, 3, 4, 5};
int *p = (int *)(&a + 1);
printf("%d\n%d\n", *(a + 1), *(p - 1));


问下,这个 &a + 1 到底移动了几个字节?

[解决办法]
a是int* a+1 是4
&a 是int a[5], 所以 &a+1 是4*5
[解决办法]
数据类型有很多 比如说int float char 类型,那么指针也有很多类型比如说int *p就是指向int类型,char *p指向char 类型 *(&a)a为数组名,那么这个指针就是指向数组类型,+1就是加把整个数组的长度
[解决办法]
这个是数组头指针的区别了。a是该数组的首地址,&a是将该数组看为一个整体,是该数组整体的首地址。所以加&与不加&是有区别的。

读书人网 >C语言

热点推荐