(C语言)指针数组与数组指针(附带代码演示)

指针数组与数组指针

根本原因:符号的优先级

由于 () > [ ] > * ,导致在定义一个指针关于数组的时候会出现意思偏差。

int *p[3] 与 int (*p)[3]的区别

int *p[3] 指针数组

由于 [ ] 优先级高,可以这么写:int *(p[3]);表示为一个数组 p[3] 里面的元素都为 指针。

代码演示
#include<stdio.h>


int main(void) 
{
	int *p[3];
	int a[3]={1,2,3};
	int i;
	for (i=0;i<3;i++)
	{
		p[i]=&a[i]; 
		printf("%d",*p[i]);
	}
	return 0;
}

运行结果:

123
--------------------------------
Process exited after 0.06895 seconds with return value 0
请按任意键继续. . .

int (*p)[3] 数组指针

表示为 一个指针 *p 指向一个含有三个元素的数组。
可以把 *p 想成 一个变量 b;即 (*p)[3] = b[3] 。

代码演示
int main(void)
{
	int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
	int (*p)[3] = a;             //相当于b[3] = a[3][3]的首地址
	for(int i=0;i<3;i++)
	{
		printf("%d",(*p)[i]);
	}
	printf("\n");
	printf("%d%d\n",(*p)[0]+1,(*p)[0]+2);
	return 0;
} 

运行结果:

123
23

--------------------------------
Process exited after 0.06631 seconds with return value 0
请按任意键继续. . .
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值