c语言二维数组指针,c语言二维数组指针用法

dfnjsfkhak 51 0

大家好,今天小编关注到一个比较有的话题,就是关于c语言二维数组指针问题,于是小编就整理了5个相关介绍c语言二维数组指针的解答,让我们一起看看吧。

  1. 二维指针数组怎么指向某一行?
  2. 二维数组指针计算公式?
  3. C语言中二维数组名能否直接赋给指针变量?
  4. 指向整型数组的指针如何用?
  5. 一维数组中有行指针吗?

二维指针数组怎么指向一行

p+1会使得指针指向二维数组的下一行,p-1会使得指针指向数组的上一行。

定义一个指针,使得这个指针有这样的特性—— 指针 p指向arr[0], 指针 p+1 指向arr[1] ,指针 p+2指向arr[2], 也就是指针每移动一个单位地址就指向下一个一维数组,那么这个指针必须满足下面二个条件

c语言二维数组指针,c语言二维数组指针用法-第1张图片-芜湖力博教育咨询公司
图片来源网络,侵删)

1、必须是整型 2、必须每移动一个单位的地址时实际上移动一个一维数组的长度即3个整型量。

二维数组指针计算公式

二维数组可以看成是指针的指针,比如b[2][5];它是一个2行5列的二维数组,也可以看成是二级指针,一级存放的是行指针,然后每个行指针里面其实又是指向了5个列元素

*(*(b+i)+j),*(b+i)是先取行指针,然后+j偏移到所要的列,然后*取值就得到i行j列的数据

c语言二维数组指针,c语言二维数组指针用法-第2张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

C语言中二维数组名能否直接赋给指针变量

二维数组的指针与指针的指针是不一样的。所以int **ppr;int fool[2][3];ppr = fool;这样是不行的。二维数组的指针必须限定第一维的大小。所以:int (*ppr)[3];ppr = fool;这样才可以。

指向整型数组的指针如何用?

数组指针(也称行指针)

定义 int (*p)[10];

c语言二维数组指针,c语言二维数组指针用法-第3张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是10,也可以说是p的步长。也就是说执行p+1时,p要跨过10个整型数据的长度。

例:
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
所以数组指针也称指向一维数组的指针,亦称行指针。

指针数组


定义 int *p[n];
[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。
如要将二维数组赋给一指针数组:
int *p[3];
int a[3][4];
p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针
for(i=0;i<3;i++)
p[i]=a[i]
这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]
所以要分别赋值。

这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。

C语言30天核心突破

一维数组中有行指针吗?

数组指针(也称行指针)

定义 int (*p)[n];

()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。

如要将二维数组赋给一指针,应这样赋值:

int a[3][4];

int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。

p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]

p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]

所以数组指针也称指向一维数组的指针,亦称行指针。

到此,以上就是小编对于c语言二维数组指针的问题就介绍到这了,希望介绍关于c语言二维数组指针的5点解答对大家有用

标签: 指针 数组 二维