数组指针,指针数组

数组指针

在 C 语言中,数组指针是一种指向整个数组的指针,其类型与普通指针不同。

特性普通指针(指向元素)数组指针(指向整个数组)
声明int *p = arrayint (*p)[4] = array
类型int *(指向int)int (*)[4](指向含4个int的数组)
指针运算p+1跳过1个int(4字节)p+1跳过整个数组(16字节)
解引用*p访问单个元素*p得到整个数组(可隐式转换为首元素地址))

例如:

int array[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11,12}};
int (*p)[4] = array;
int i,j;

for(i=0;i<3;i++)
{
	printf("%p",p++);
}

输出的结果是048的地址。

为什么不直接用 *p = array 呢?

int array[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11,12}};
int *p = array;
int i,j;

for(i=0;i<3;i++)
{
	printf("%p",p++);	//虽然能遍历出来,但是失去了二维数组的感觉,因为它是以一整列输出的,没有一行一行输出
}

因为p++array++的跨度是不一样的,p++的跨度是单个int型大小,而二维数组array++的跨度是一整行;虽然程序能遍历出来,但是失去了二维数组的感觉,因为它是以一整列输出的,没有一行一行输出。

指针数组

在 C 语言中,指针数组是由多个指针组成的数组,其每个元素都是一个指针变量。
下面表格是:指针数组数组指针的区别

特性指针数组(数组元素是指针)数组指针(指向整个数组)
声明int *arr[4];int (*p)[4];
本质数组(存储多个指针)指针(指向一个数组)
元素类型int* (每个元素是指针)int(指向的数组元素类型)
访问方式arr[i]获取第 i 个指针(*p)[i]访问指向的数组的第 i 个元素

如下图:定义一个指针数组,存的是a,b,c,d的地址。
在这里插入图片描述

输出为:10 20 30 40
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值