用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素,但在概念和使用上,多维数组的指针比一维数组的指针要复杂一些。可以认为二维数组是数组的数组。
例:定义:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
则二维数组a是由3个一维数组所组成的,设二维数组的首行首地址为2000,
表示形式 | 含义 | 地址 |
a | 二维数组名,指向一维数组a0,即0行首地址 | 2000 |
a[0],*[a+0],*a | 0行0列元素地址 | 2000 |
a[1]+2,*[a+1]+2,&a[1][2] | 1行2列元素地址 | 2024 |
*(a[1]+2),*(*(a+1)+2),a[1][2] | 1行2列元素的值 | 元素值为13 |
把二维数组分解为一维数组a[0],a[1],a[2]之后,设p为指向二维数组的指针变量。可定义为:int(*p)[4]。
它表示p是一个指针变量,它指向包含四个元素的指针数组。
p+i则指向一维数组a[i]。
二维数组指针变量说明的一般形式为:类型说明符(*指针变量名)【长度】
例:用指针变量输出二维数组元素的值。
#include <stdafx.h> #include<stdio.h> void main() { int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11}; int i,j; int (*p)[4]; p=a; for(i=0;i<=2;i++) { for(j=0;j<=3;j++) { printf("%d ",*(*(a+i))+j); } } }
例:通过输入指定行数和列数打印出二维数组对应的元素值。
#include <stdafx.h> #include<stdio.h> void main() { int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11}; int i,j; int (*p)[4]; p=a; printf("i="); scanf("%d",&i); while(i>2||i<0) { printf("i="); scanf("%d",&i); } printf("j="); scanf("%d",&j); while(j>3||j<0) { printf("j="); scanf("%d",&j); } printf("%d",*(*(a+i)+j)); }