int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};//让行指针指向二维数组的首行int(*p)[4]= a;int(*p)[4]=&a[0];//让行指针指向二维数组的第1行 int(*p)[4]=&a[1];int(*p)[4]= a +1;
利用行指针遍历二维数组:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};//让行指针指向二维数组的首行int(*p)[4]= a;int i, j;for(i =0; i <3; i++){for(j =0; j <4; j++){printf("%d\t",*(*(p + i)+ j));//p[i][j] (*(p + i))[j]}puts("");}
练习
1.实现遍历二维数组,找出最大值及其下标
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};int(*p)[4];
p = a;int max_h =0, max_l =0;int i, j;for(i =0; i <3; i++){for(j =0; j <4; j++){if(p[i][j]> p[max_h][max_l]){
max_h = i;
max_l = j;}}}printf("the max num is: a[%d][%d] = %d\n", max_h, max_l, p[max_h][max_l]);
行指针与一维数组
int a[6]={1,2,3,4,5,6};int(*p)[6]=&a;*(*p + i)==(*p)[i]==*(*(p +0)+ i)== p[0][i]
练习
1.实现遍历一维数组,累加求和
int a[6]={1,2,3,4,5,6};int(*p)[6]=&a;int i,sum =0;for(i =0; i <6; i++){
sum += p[0][i];}printf("sum=%d\n", sum);
一级指针与行指针
一级指针:
int a =10;&a int*char ch ='a';&ch char*
一维数组的数组名 -- 数组首元素(变量)的地址
a ==&a[0]int*int a[5]={1,2,3,4,5};&a[0]int*&a[1]int*
二维数组
int a[2][3]={1,2,3,4,5,6};&a[0][0]int*
a[0]==&a[0][0]int*
行指针(数组指针):
一维数组的数组名 -- 数组首元素(变量)的地址
int a[5]={1,2,3,4,5};int(*p)[5]=&a;
二维数组数组名代表首行的地址,行地址,行指针
int a[2][3]={1,2,3,4,5,6};int(*p)[3]= a;int(*p)[3]=&a[0];int(*p)[3]=&a[1];