关于指向数组的指针

来源:互联网 发布:学术美国 知乎 编辑:程序博客网 时间:2024/05/22 17:15
首先来个小例子:
#include <stdio.h>int main(){int array[3]={1,2,3};int (*p_array)[3];p_array=&array ;printf("p_array..%p\n",*p_array);printf("p_array++..%p\n",*++p_array);system("pause");return 0;}/*p_array是指向数组元素为3的数组的指针,由于在我的环境中,每个int是4个字节,所以每次p_array加1之后,p_array中的内容是前进了1*12个字节*/

输出结果是:



参考征服C指针所做的测试,书中提到:根据ANSI C的定义,在数组名前加上&,可以得到“指向数组的指针”。

因此:

int array[3];

int (*p_array)[3]        ;/*p_array是指向int数组(元素个数为3)的指针*/

p_array=&array;    /*数组添加&,取得指向 数组的指针*/

这样赋值是没有问题的,因为他们的类型的相同的。

可是如果进行:p_array=array;这样的赋值,编译器就会报出警告。

因为"指向int的指针"和“指向int的数组(元素个数为3)的指针是完全不同的类型。

所以p_array加1,地址实际上前进了12个字节。(我的机器一个int型是4个字节)。


0 0
原创粉丝点击