指针和二维数组

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

 

posted @ 2021-09-08 15:50  好想成为一只鸟  阅读(50)  评论(0)    收藏  举报