指针数组的问题

指针数组:本质上还是数组,只是数组的成员是指针类型的,上述的a[0]仅代表了指针数组中的第一个成员。实际上用法与普通的指针一样

一般定义为: char *p[10]。
在这里插入图片描述

在这里插入图片描述

数组指针:本质上是指针,代表的是指向有10个元素的数组的首地址的指针。
一般定义为: char (*p)[10]
在这里插入图片描述
数组指针指向的是一维数组,上面的例子使用的二维数组是为了验证指针++后,应该是跨过了5个成员的地址范围,指向了第二组数组b[1][5]。

由上又引出了数组b[5],表示数组的首地址和数组第一个成员的首地址的问题
也就是“&b”,和 “b” 的区别。
首先介绍“b”,这里和&b[0]同样,是表示的该数组的第一个成员的首地址。
而“&b”,则是表示数组的首地址。

通过下列测试代码得知,仿佛上面两种情况又没有什么区别。
在这里插入图片描述

那么,这两种有什么区别呢,通过下面这个例子来理解:
在这里插入图片描述
这里使用的C++的编译器,会更加严格,直接报了err。
说的是“&a”编译器认为是一个"char *[5]"类型的数组指针,不能赋给"char *“的指针。
所以区别来了。”&a"应该是一个表示数组的首地址,虽然这个地址与数组的第一个成员的地址相同。

在这里插入图片描述
最后,内存的分配应该是如下图所示:
在这里插入图片描述

最后,展开一下指针函数和函数指针的概念:

指针函数本质上只是函数,只是具有指针型的返回值,一般定义如下:

int *fun(int a);

函数指针本质上还是指针,一般定义如下:

int (*probe)(struct platform_device *);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值