首先来个小例子:
#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个字节)。