【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 @   Vivid-BinGo  阅读(302)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示