【C语言】 二维数组的地址

分析

 

  • *s+8为:第九个数的地址
  • *(s+1)+3为:*(第二行的地址)+3 --> 从第二行的地址开始往后第4个数的地址
  • *(*s+8)为:*(第九个数的地址) --> 9
  • *(*(s+1)+3)为:*(从第二行的地址开始往后第4个数的地址) --> 9
  • 可以看出*有两个含义,一个取值,一个是步长。

代码

 1 #include<bits/stdc++.h>
 2 using namespace std; 
 3 int main() 
 4 {
 5     int s[4][5]={{1,2,3,4,5},
 6                  {6,7,8,9,10},
 7                  {11,12,13,14,15},
 8                  {16,17,18,19,20}};
 9     int (*ps)[5]=s;
10     for(int i=0;i<4;i++)
11     {
12         for(int j=0;j<5;j++)
13         {
14             printf("%p ",&s[i][j]);
15         }
16         printf("\n");
17     }
18     printf("\n");
19     printf("%p, %p, %p\n",s,*s,&s);
20     printf("%p, %p, %p\n",s+1,*s+1,&s+1); //步长分别为:行,逐个元素,整个数组 
21     printf("%p, %p\n",*s+8,*(s+1)+3);
22     printf("%d, %d\n",*(*s+8),*(*(s+1)+3));
23     return 0;
24 }
posted @ 2023-03-18 12:00  Vivid-BinGo  阅读(241)  评论(0编辑  收藏  举报