鱼C论坛

 找回密码
 立即注册
查看: 1807|回复: 2

[已解决]下面这段代码我没懂求解答!

[复制链接]
发表于 2022-5-27 00:06:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
         #include<stdio.h>
                                 int main()
                                 {
                                         int  a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
                                         int (*p)[4];                                                //这儿
                                         int i,j;
                                         p=a;
                                         for(i=0;i<3;i++)
                                         {
                                                 for(j=0;j<4;j++)
                                                 {
                                                         printf("%2d ",*(*(p+i)+j));                //这儿
                                                 }
                                                 printf("\n");
                                         }
                                 }
最佳答案
2022-5-27 09:51:22
本帖最后由 jackz007 于 2022-5-27 09:52 编辑
        int (* p)[4] ; // 定义一个指向末维为 4 的二维整型数组指针 p,这样,p ++ 带来的指针跨度是 4 个 int,就是指向数组的下一行。
        * (* (p + i) + j)) ; // p 指向了 a,那么,p 就是 a,只不过 a 是常量,而 p 是变量,这个表达式实际上就是 p[i][j],也就是 a[i][j],关于这个,可以结合前面说的 p ++ 的跨度是 4 个 int 来进行理解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-27 05:54:00 | 显示全部楼层
本帖最后由 jhq999 于 2022-5-27 06:16 编辑
                                 #include<stdio.h>
                                 int main()
                                 {
                                         int  a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
                                         int (*p)[4];                                                //声明一个一维大小是4的二维数组指针
                                         int i,j;
                                         p=a;
                                         for(i=0;i<3;i++)
                                         {
                                                 for(j=0;j<4;j++)
                                                 {
                                                         printf("%2d ",*(*(p+i)+j));                //p+i=&p[i];*(p+i)=p[i];*(p+i)+j=&p[i][j];*(*(p+i)+j))=p[i][j];
                                                 }
                                                 printf("\n");
                                         }
                                 }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-27 09:51:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-5-27 09:52 编辑
        int (* p)[4] ; // 定义一个指向末维为 4 的二维整型数组指针 p,这样,p ++ 带来的指针跨度是 4 个 int,就是指向数组的下一行。
        * (* (p + i) + j)) ; // p 指向了 a,那么,p 就是 a,只不过 a 是常量,而 p 是变量,这个表达式实际上就是 p[i][j],也就是 a[i][j],关于这个,可以结合前面说的 p ++ 的跨度是 4 个 int 来进行理解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 14:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表