鱼C论坛

 找回密码
 立即注册
查看: 1370|回复: 11

[已解决]大佬们,能帮我看看我代码这样的解释是否正确(数组指针)

[复制链接]
发表于 2020-3-22 19:49:53 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>
int main()
{        
        int temp[5] ={1,2,3,4,5};
        int (*p1)[5] = &temp;  //整个数组的地址
    int i;
   
        for(i =0;i < 5;i++)
        {
           printf("%d\n",*(*p1+i));  /*  *p1是数组temp中第1个元素的地址 *p1+i是数组temp中第i+1个元素的地址  
                                         *(*p1+i)是数组temp中第i+1个元素的地址的地址,即为数组temp中第i+1个元素的值     */
        }

    return 0;
}
最佳答案
2020-3-22 21:14:18
本帖最后由 sunrise085 于 2020-3-22 22:22 编辑

前两天有个人提问了和你一样的问题。
我在那个帖子中讲的很详细。在那个帖子二楼和四楼,应该能帮你解惑
你可以看看。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-22 21:14:18 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-3-22 22:22 编辑

前两天有个人提问了和你一样的问题。
我在那个帖子中讲的很详细。在那个帖子二楼和四楼,应该能帮你解惑
你可以看看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-22 21:41:33 | 显示全部楼层
   printf("%d\n",*(*p1+i));  /*  (*p1)是数组temp中第1个元素的地址 (*p1+i)是数组temp中第i+1个元素的地址  
                                         *(*p1+i)是从数组temp中第i+1个元素的地址上取出的地址上取值,即为数组temp中第i+1个元素的值     */
我个人认为,你理解的是对的,表述可能需要再严谨些,哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-22 22:42:06 | 显示全部楼层
4goodworld 发表于 2020-3-22 21:41
printf("%d\n",*(*p1+i));  /*  (*p1)是数组temp中第1个元素的地址 (*p1+i)是数组temp中第i+1个元素的地 ...

好的 谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-22 23:00:09 | 显示全部楼层

我不是大佬,互相学习、共同进步
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 20:38:17 | 显示全部楼层
sunrise085 发表于 2020-3-22 21:14
前两天有个人提问了和你一样的问题。
我在那个帖子中讲的很详细。在那个帖子二楼和四楼,应该能帮你解惑
...

谢谢哥,但是你自己写的那个代码有一行不太对:
int (*p2)[4]= &temp;(这个是你写的)应该是不加&的,temp本身就是去二维数组中的第一行所有元素的地址了,就不需要再加取址符了,你看这样对吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 20:59:57 | 显示全部楼层
冰激凌太烫 发表于 2020-3-23 20:38
谢谢哥,但是你自己写的那个代码有一行不太对:
int (*p2)[4]= &temp;(这个是你写的)应该是不加&的,t ...

temp是个二维数组。
&temp是整个数组的首地址(也叫数组起始地址) (类型为 int(*)[3][4] )
&temp[0]是第1行的首地址(二维数组每一行相当于一个一维数组)(类型为 int(*)[4])
&temp[0][0]是数组中第一个元素的地址(类型为 int*)
temp是数组首元素的的首地址( 在做左值时为类型为int[3][4],为二维数组数组名 , 在做右值时类型为 int(*)[4] )
temp[0]是第一行元素的首地址(做左值时为类型为int[4], 相当于一维数组数组名 , 做右值时类型为 int*)

&temp ,temp , temp[0] , &temp[0] , &temp[0][0] 的值相等
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 21:08:46 | 显示全部楼层
sunrise085 发表于 2020-3-23 20:59
temp是个二维数组。
&temp是整个数组的首地址(也叫数组起始地址) (类型为 int(*)[3][4] )
&temp[0]是第 ...

temp是整个数组的首地址(也叫数组起始地址)
而&temp是整个数组的地址吧,这句话是小甲鱼讲的难道他当时候口误嘛
还有就是那个代码如果加上&,我在vc++6.0是运行不了的[img]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 21:17:24 | 显示全部楼层
本帖最后由 sunrise085 于 2020-3-23 21:29 编辑
冰激凌太烫 发表于 2020-3-23 21:08
temp是整个数组的首地址(也叫数组起始地址)
而&temp是整个数组的地址吧,这句话是小甲鱼讲的难道他当时 ...


哦哦,可能吧。不同的编译器是有所差异。
最开始的时候,我没太关注这个写法。我也是从上个帖子的程序中复制后修改的。你的这个帖子中不也是这样写的么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 21:23:16 | 显示全部楼层
sunrise085 发表于 2020-3-23 21:17
哦哦,可能吧。不同的编译器是有所差异。
最开始的时候,我没太挂住这个写法。我也是从闪哥帖子的程序中 ...

我是大一的 哥 最近开始恶补C语言  还没说毕业
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 21:24:27 | 显示全部楼层
sunrise085 发表于 2020-3-23 21:17
哦哦,可能吧。不同的编译器是有所差异。
最开始的时候,我没太挂住这个写法。我也是从闪哥帖子的程序中 ...

我刚才又去看了一遍指针和二维数组那节课视频,小甲鱼讲的没有问题。
int (*p2)[4]= &temp这行代码确实不需要加&
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 21:29:21 | 显示全部楼层
冰激凌太烫 发表于 2020-3-23 21:23
我是大一的 哥 最近开始恶补C语言  还没说毕业

不好意思,手快,打错字了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 12:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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