34-指针与二维数组

本小节知识点:

1、数组名访问数组元素

2、普通指针访问二位数组

3、指向二维数组的指针

4、指针数组和二维数组指针变量的区别

=========================================================================

1、数组名访问数组元素

多维数组的地址

int a[3][4]={{1,3,5,7}, {9,11,13,15},{17,19,21,23}}; 

a代表第0行首地址

a+1代表第1行首地址

a+2代表第2行首地址

a+i代表行号为i的行首地址(按行变化) 

a[0]代表a[0][0]的地址

a[0]+1代表a[0][1]的地址

a[0]+2代表a[0][2]的地址

a[0]+3代表a[0][3]的地址 

2、普通指针访问二维数组 

3、指向二维数组的指针 

二维数组指针变量说明的

一般形式为:

类型说明符 (*指针变量名)[长度]

其中:

1> “类型说明符”为所指数组的数据类型。

2> “*”表示其后的变量是指针类型。 “

3>  长度”表示二维数组 分解为多个一维数组时, 一维数组的长度,也就是二维数组的列数

   如要将二维数组赋给一指针,应这样赋值:
int a[3][4];
int (*p)[4];

p=a; p++;

// 该语句是定义一个数组指针, 指向含4个元素的一维数组。 //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]

// 该语句执行过后, 也就是p=p+1; p跨过行a[0][]指向了行a[1][]  所以数组指针也称指向一维数组的指针, 亦称行指针。 

4、指针数组和二维数组指针变量的区别

应该注意指针数组和二维数组指针变量的区别。

这两者虽然都可用来表示二维数组,但是其表示方法和意义是不同的。

二维数组指针变量是单个的变量,其一般形式中"(*指针变量名)"两边的括号不可少。

而指针数组类型表示的 是多个指针(一组有序指针)在一般形式中"*指针数组名"两边不能有括号。

例如:

int (*p)[3]; 表示一个指向二维数组的指针变量。该二维数组的列数为3或分解为一维数组的长度为3。

int *p[3] 表示p是一个指针数组,有三个下标变量p[0],p[1],p[2]均为指针变量。 

原文地址:https://www.cnblogs.com/xdl745464047/p/4023755.html