指针和二维数组
array[4][5]:指向包含五个元素的指针
#include <stdio.h> int main () { int array[4][5]={0}; printf("sizeof int:%d\n",sizeof(int)); printf("array:%p\n",array); printf("array+1:%p\n",array+1); return 0; }
结果
sizeof int:4
array:000000000061FDC0
array+1:000000000061FDD4
array与array+1相差14,十六进制的14相当于十进制的20,又因为int为4个字节,相当于跨越了5个元素,因此证明了array就是指向包含五个元素的指针
*(array+1)==array[1],指向第二行子数组的第一个元素的地址
#include <stdio.h> int main () { int array[4][5]={0}; int i,j,k=0; for(i=0;i<4;i++) { for(j=0;j<5;j++) { array[i][j]=k++; } } printf("*(array+1):%p\n",*(array+1)); printf("array[1]:%p\n",array[1]); printf("&array[1][0]:%p\n",&array[1][0]); printf("**(array+1):%d\n",**(array+1)); return 0; }
结果
*(array+1):000000000061FDC4
array[1]:000000000061FDC4
&array[1][0]:000000000061FDC4
**(array+1):5
*(array+1)+3==&array[1][3],指向第二行第4个元素,
#include <stdio.h> int main () { int array[4][5]={0}; int i,j,k=0; for(i=0;i<4;i++) { for(j=0;j<5;j++) { array[i][j]=k++; } } printf("*(*(array+1)+3):%d\n",*(*(array+1)+3)); printf("array[1][3]:%d\n",array[1][3]); return 0; }
结果
*(*(array+1)+3):8
array[1][3]:8
数组指针和二维数组
#include <stdio.h> int main () { int array[2][3]={{0,1,2},{3,4,5}}; int (*p)[3]=array; printf("**(p+1):%d\n",**(p+1)); printf("**(array+1):%d\n",**(array+1)); printf("array[1][0]:%d\n",array[1][0]); printf("*(*(p+1)+2):%d\n",*(*(p+1)+2)); printf("*(*(array+1)+2):%d\n",*(*(array+1)+2)); printf("array[1][2]:%d\n",array[1][2]); return 0; }
结果
**(p+1):3
**(array+1):3
array[1][0]:3
*(*(p+1)+2):5
*(*(array+1)+2):5
array[1][2]:5
浙公网安备 33010602011771号