全站搜索未启用
跳到主要内容

视频四:指针与数组的关系 视频

1. 指针与一维数组的关系

(1) 数组名是指针常量

一维数组名是指向该数组第一个元素的指针常量。

int a[7]={12,25,18,30,63,44,50};

a的值等于&a[0],类型int * const

*a为a[0]元素,*a的值为a[0]的值。

a为指针常量,即其值不可修改,使用a++是错误的。

 

(2) 数组元素的下标和指针访问方式

int a[7]={12,25,18,30,63,44,50};

*a等价于与a[0],*(a+1)等价于a[1],*(a+i)等价于a[i]

数组a中下标为i的元素的两种访问方式:a[i]和*(a+1)

int *p=a+i; //*p等价于a[i],*p++是合法的,*a++不合法。

 

(3) 利用不同方式访问数组元素举例

for(i=0; i<7; i++) printf("%5d\n",a[i]);//下标方式

for(i=0; i<7; i++) printf("%5d\n",*(a+i));//指针方式

for(p=a; p<a+7; p++) printf("%5d\n",*p);//指针方式

for(p=a,i=0;i<7;i++) printf("%5d\n",p[i]);//下标方式

 

2. 指针与二维数组的关系

(1) 二维数组名是指针常量

二维数组名是指向该数组第一行元素的指针常量,其值为整个二维数组空间的首地址,亦即行、列下标均为0的第1个元素的地址。

int b[3][4]={{1,2,3,4},{2,4,6,8},{3,6,9,12}};

b[0]为元素类型为int的、长度为4的一维数组

b[0]数组包含有4个元素:b[0][0]、b[0][1]、b[0][2]、b[0][3]

的值为:&b[0]即&b[0][0];b值的类型为: int(*const)[4]

b[i]为int型的一维数组,b[i]为数组名;b[i]的值为:b[i][0]的地址

b[i]值的类型: int* const;b和b[i]为指针常量,其值不允许被修改

(2) 把二维数组名的值赋给同类型的指针变量

二维数组名的值可以赋给同类型的指针变量,然后通过此指针变量访问每个二维元素。

int b[3][4];// b的值为int (*)[4]类型

int (*pb)[4]=b;//pb为int (*)[4]类型

pb[2][3]等同于b[2][3]

int (*pb)[4]与int (*pb)[5]类型不同

int *pb[4]与int (*pb)[4]不同,前者是指针数组,后者是指向数组的指针。

(3) 二维数组元素的下标和指针访问方式

int b[m][n];

下标访问方式:b[i][j]

指针访问方式表示1:(*(b+i))[j]

指针访问方式表示2:*(b[i]+j)

指针访问方式表示3:*(*(b+i)+j)

for(i=0; i<3; i++) {

for(j=0; j<4; j++)

printf("%d ", b[i][j]);//可改为任一种指针(间接)方式

printf("\n");

}