其他分享
首页 > 其他分享> > 指针和多维数组

指针和多维数组

作者:互联网

  指针与多维数组之间的关系

  

例子如下:

显然用指针表示法来表示多维数组会很麻烦,所以建议使用数组表示法

 

指向多维数组的指针

如何声明一个指指针变量pz指向一个二维数组?在编写类似zippo这样的二维数组时会用到这样的指针。把指针声明为Int类型还不够,因为指向Int只能与zippo[0]的类型匹配,说明指针指向一个Int值。但zippo是它首元素的地址,该元素是一个内含两个int类型值的一维数组。因此,pz必须指向一个内含两个int类型值的数组,如下:

如前所述,虽然pz是指针,但也可以使用pz[2][1]这样的写法

zippo[m][n] == *(*(zippo + m) + n)

pz[m][n] ==  *(*(pz+ m) + n)

 

指针的兼容性

指针之前的赋值很严格,不是同一基本数据类型的指针或值无法赋值

更复杂的类型也是如此:

以上无效的前你两个赋值表达式都是指向了不同的类型:

pt指向了一个Int类型值,而ar1指向一个内含3个int类型元素的数组

pa指向一个内含3个Int类型元素的数组,所以与ar1兼容,但ar2指向一个内含2个Int类型元素的数组,所以不兼容

p2是指向指针的指针,他指向的指针指向int(绕死我了),而ar2是指向数组的指针,该数组内含2分int类型的元素,所以p2与ar2不兼容

*p2是指向int的指针,与ar2[0]兼容。因为ar2[0]是指向该数组首元素的指针(ar2[0][0]),所以ar2[0]也是指向int的指针。

 

前文提到过,把const指针赋值给非const指针不安全,但非const指针赋值给const指针可以,但只限于一级解引用,在进行二级解引用时,这样的赋值也不安全:

所以在c++中已经不允许这样的写法出现,即非const指针不可以赋值给const指针。

 

 

函数和多维数组

  如果要编写处理二维数组的函数,首先要能正确的理解指针才能写出,通常使用数组表示法进行相关操作:

  

  

  

  

  

 

注意,下面声明不正确:

int sum2(int ar[][], int rows);  //错误的声明

编译器会把数组表示法转换为指针表示法,列如:ar[1]转换为ar + 1,要知道ar所指向的对象大小,如果第二个括号为空,编译器则不知道该怎么处理。

也可以在第一个括号填值,但编译器会忽略。

一般而言,声明一个指向N维数组的指针时,只能省略最左边的值:

int sum(int ar[][2][3][4], int rows);

因为它只用于表明这是一个指针,而其他的方括号则用于描述指针所指向数据对象的类型。

 

标签:指向,int,地址,数组,zippo,多维,指针
来源: https://www.cnblogs.com/xingyboy/p/16210753.html