先看一段代码:
#includeint main() { int matrix[2][5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}}; printf("matrix=%pt,matrix+1=%pn", matrix, matrix + 1); printf("matrix[0]=%pt,matrix[0]+1=%pn", matrix[0], matrix[0] + 1); printf("*matrix=%pt,*matrix+1=%pn", *matrix, *matrix + 1); printf("&matrix[0]=%pt,&matrix[0]+1=%pn", &matrix[0], &matrix[0]+1); printf("&matrix[0][0]=%pt,&matrix[0][0]+1=%pn", &matrix[0][0], &matrix[0][0]+1); printf("matrix[0][0]=%dn", matrix[0][0]); printf("*matrix[0]=%dn", *matrix[0]); printf("**matrix=%dn", **matrix); printf("matrix[1][1]=%dn", matrix[1][1]); printf("*(*(matrix+1)+1)=%dn", *(*(matrix + 1) + 1)); printf("*((*matrix+1)+1)=%dn", *((*matrix + 1) + 1)); return 0; }
输出:
matrix=0061FEA8 ,matrix+1=0061FEBC matrix[0]=0061FEA8 ,matrix[0]+1=0061FEAC *matrix=0061FEA8 ,*matrix+1=0061FEAC &matrix[0]=0061FEA8 ,&matrix[0]+1=0061FEBC &matrix[0][0]=0061FEA8 ,&matrix[0][0]+1=0061FEAC matrix[0][0]=1 *matrix[0]=1 **matrix=1 matrix[1][1]=7 *(*(matrix+1)+1)=7 *((*matrix+1)+1)=3
虽然数值上,matrix=matrix[0]=*matrix=&matrix[0]=&matrix[0][0],但是含义却不同。 1、matrix表示一个特殊的数组指针,数组中的每个元素又是一个数组,这个特殊数组含有2个元素,每个元素占用字节为BC-A8=14h=20,即4×5=20,matrix+1,则指针地址数值+20 2、matrix[0]表示一个普通的一维数组指针,数组中含有5个元素,每个元素占用4个字节,数组总长度为20个字节,matrix[0]+1,则指针地址值+4 3、*matrix=matrix[0]=&matrix[0][0] 4、matrix=&matrix[0] 5、遍历二维数组中每个元素,使用*(*(matrix+i)+j),i表示行,j表示列



