c语言指针篇——数组指针和指向二维数组的指针变量(*p)[N]
2018-04-06 14:00
218 查看
数组指针
首先,我们先介绍一下二维数组和二维数组的指针,二维数组相当于一个特殊的一维数组里面每个元素又是一个一维数组,例如:int a [ 3 ] [3],可以看成一个3行的一个列数组,每一列的元素又是一个长度为3的数组,数组名的一个特殊一维数组的首地址,如下:a(第0行的首地址,也是可以是&a [0])指向a [0],对0行首地址元素的引用就有 *a = a [0];
a + 1(第一行的首地址)指向a [1],有*(a + 1)= a [1];
a + 2(第二行的首地址)指向a [2],有*(a + 2)= a [2];
a + i(第i行的首地址)指向一个[i]中,有*(a + 1)= a [i]中。
而a[0],a[1],a[2]又是里面一维数组的数组名,因此a[i]可表示i行的首地址:
a[0](第0行第0个元素的地址)指向一个[0] [ 0 ],有*(a [ 0 ] +0)= a [0] [ 0 ];
a [0]+1(第0行第1个元素的地址)指向a [0] [1],有*(a [0] +1)= a [0] [1];
a [0] +2(第0行第2个元素的地址)指向a [0] [2],有*(a [0] +2)= a [0] [2]
总结:a[i]+j(第i行第j列个元素的地址)指向a[i][j], 有*(a[i]+j)=a[i][j],
即 * (*(a+i)+j)=a[i][j]。
二维数组的指针变量
对于指向二维数组的指针变量p,可以有两种:一种是指向数组元素的列指针,一种是指向行的行指针,这时,p不是指向一个具体的数组元素,而是指向一个包含m个元素的一维数组。这里对行指针特殊说明一下;
行指针的定义形式为:类型标识符 (*指针变量名)[长度];
例如: int a[3][4],(*p)[4]=a; //这里也可以写为int a[3][4],(*p)[4]=&a[0];
其中p,p+1,p+2和a,a+1,a+2都是第i行的首地址。
使用指针变量访问二维数组的任意一个元素的方法
(1)使用列指针:定义一个列指针p,让它指向二维数组的第0个元素
int a[3][4]; int *p; p=&a[0][0]; //因为a[0]是第0行的数组名,所以p=&a[0][0]相当于p=a[0],因为a[i][j]前面共有i*4+j个元素,该二维数组的任意i行j列元素可表示为*(p+i*4+j)
(2)使用行指针:定义一个行指针p,让它指向二维数组的第0行
int a[3][4]; int (*p)[4]; p=a; //也可以为p=&a[0];
其中* ( *(p+i)+j)表示任意一个i行j列的元素。
相关文章推荐
- C语言学习笔记.指针4--数组指针和指向数组的指针变量(一)
- 9、C语言中二维数组及数组名及指向二维数组的指针变量
- 9、C语言中二维数组及数组名及指向二维数组的指针变量
- C语言:定义指向二维数组的指针变量
- c语言编程-----指向二维数组的指针
- C语言中指向一位数组与二维数组的指针
- C语言中的指针(指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针)
- 一个指向二维数组元素的指针变量,内存地址怎么不连续?
- 直观理解C语言中指向一位数组与二维数组的指针
- 【指针篇】C语言:指针与数组的区别,数组指针与指针数组的剖析。
- 4、C语言中 指向指针变量的指针变量
- C语言输出指针变量地址以及指向变量的地址
- C语言中,指针,引用,二维数组,指针数组,数组指针的解析
- C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数
- C语言学习-----指针篇(1)-----指向多维数组的指针和指针变量
- 8--12指向多维数组元素的指针变量之指向二维数组的指针
- 彻底搞清C/C++中一维数组,二维数组,指针,数组指针和指针数组以及指向指针的指针,行地址和列地址之间的关系
- C语言数组指针(指向数组的指针)
- C语言特性(指针数组和指向指针变量的指针)
- 【C语言】使用指向指针数据的指针变量,输出一组字符串