关于指向数组的指针

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值