【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 }