在二维数组中,行指针是指向一维数组的指针变量.

我请教下,在二维数组中,行指针是指向一维数组的指针变量.
最新回答
局外亾

2024-07-01 09:27:31

不是

首先数组名都是数组地址的指针常量。

假设int  a[3]这样一个数组,a是普通常量指针,即一维数组指针,其地址类型是 int * 。因此要定义一个指向这个数组的指针p,则其格式为 : int *p;然后就可以赋值了:p=a;(类型一致)。

再假设int b[3][4]这样一个二维数组,b是行地址常量指针,其地址类型是 int (*)[4] 。因此要定义一个指向这个数组的指针ptr,则其格式为 : int (*ptr)[4]; 然后就也可以赋值了:ptr=b;(类型一致)

这里容易混淆的是,看上去一行数据就是一维数组,所以很多人会将二维数组的一行数据与一维数组的数据混为一谈,其实有差异的,差异在于:行宽不同

我们可以看出一维数组的地址类型为 (type *),没有下标(行宽、数组长度、元素个数),只有定义数组的时候需要给予下标,或者省略下标时必须初始化{1,2,3,4.....},编译器会自动获得下标并分配内存。因此指向一维数组指针也不带下标的,这也就是指针灵活也不安全的原因(数组边界检查及宽度控制完全交给程序员)。然而二维数组中的行宽是确定,也是必须的,因此二维数组的行宽必须明确,因此其指针定义必须包含行宽信息。

type (*)[n] 是行指针类型格式,方括号内的n就是指示行宽,因此行指针不是简单的一维数组指针,而是被限定宽度的一维数组指针,这就是区别。

归纳一下

一维数组指针定义格式:type *p

二维数组行指针定义格式:type (*p)[n]

另外 一维数组指针加一,是递增一个type宽度,二维数组行指针加一,是递增 type宽度*行宽,也就是数据宽度乘一行的元素个数,单位都是字节。

星恋影随

2024-07-01 07:04:19

是的
繁花晕染

2024-07-01 02:26:39

指针常量