鱼C论坛

 找回密码
 立即注册
查看: 2154|回复: 12

[已解决]为什么打印出来不是123450而是12345

[复制链接]
发表于 2021-7-5 14:04:42 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>
int main()
{
int temp[5]={1,2,3,4,5};
int(*p2)[5]=&temp;
int I;
for(i=0;i<5;i++)
{
   printf(“%d\n”,*(*p2+i));
  };
return 0;
}
最佳答案
2021-7-5 14:44:32
int temp[5]={1,2,3,4,5}

这本就是1,2,3,4,5, 怎么会有0呢?
如果改为
int temp[5]={2,3,4,5,0}
就会打印23450了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-5 17:06:35 | 显示全部楼层
青出于蓝 发表于 2021-7-5 14:44
这本就是1,2,3,4,5, 怎么会有0呢?
如果改为
int temp[5]={2,3,4,5,0}


我发现我哪错了,我以为int a[5]是打印六个,分别是a[0],a[1],a[2],a[3],a[4],a[5],后来发现原来是a[0],a[1],a[2],a[3],a[4]呀,闹了个乌龙,其他的我还都可以理解,就是这个搞乱了,这几天连夜学的,脑袋不太够用,不好意思拉,谢谢大家的帮助,和我当时脑回路一样的希望能有所启发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-5 14:12:03 | 显示全部楼层
楼主什么编译器啊,括号是中文的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-5 14:16:02 | 显示全部楼层
青出于蓝 发表于 2021-7-5 14:12
楼主什么编译器啊,括号是中文的

我复制的,就想问一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-5 14:20:59 | 显示全部楼层
本帖最后由 青出于蓝 于 2021-7-5 14:22 编辑
boat7 发表于 2021-7-5 14:15
我复制的,就想问一下

#include <stdio.h>
int main()
{
int temp[5]={1,2,3,4,5};
int(*p2)[5]=&temp;
int i;
for(i=0;i<5;i++)

   printf("%d\n",*(*p2+i));
  
return 0;
}
改了一下,打印结果只有1 2 3 4 5,没有0
楼主可以自己跑一跑
欢迎追问~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-5 14:41:55 | 显示全部楼层
按照楼主的  没有输出0呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-5 14:43:00 | 显示全部楼层
照我的想法来看int temp[5]={1,2,3,4,5};应该是int temp[5]={1,2,3,4,5,0},然后*p2=temp[0],for语句i=0,每次+1所以应该是2,3,4,5,0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-5 14:44:32 | 显示全部楼层    本楼为最佳答案   
int temp[5]={1,2,3,4,5}

这本就是1,2,3,4,5, 怎么会有0呢?
如果改为
int temp[5]={2,3,4,5,0}
就会打印23450了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-7-5 14:49:29 | 显示全部楼层
boat7 发表于 2021-7-5 14:43
照我的想法来看int temp[5]={1,2,3,4,5};应该是int temp[5]={1,2,3,4,5,0},然后*p2=temp[0],for语句i=0,每 ...

for循环中 i=5时就不会再循环了,所以i=0、1、2、3、4才会参与循环并分别打印1,2,3,4,5
楼主还有问题吗
欢迎追问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-5 15:32:53 | 显示全部楼层
本帖最后由 连帅帅 于 2021-7-5 15:50 编辑
boat7 发表于 2021-7-5 14:43
照我的想法来看int temp[5]={1,2,3,4,5};应该是int temp[5]={1,2,3,4,5,0},然后*p2=temp[0],for语句i=0,每 ...


我给你分析下:
p2指向数组temp的首地址(栈中的地址),*p2取出的是栈中第一个元素(也就是1)的栈中地址,然后*(*p2)取出的是数组中的第一个元素偏移i位的元素值(注意看,此时i为0),然后每次偏移量加一(由i+1来决定的),相当于取数组的下一个元素,依次达到遍历数组的效果。
为什么取不到0?
因为压根取不到0,当超出数组的范围后,打印的是随机值,你的i最大值是4,相当于偏移了4个,也就是第五个数组元素的值。
给楼主的建议:
你可以打印*(p2+i) 0<=i<5的数组元素的内存地址进行验证,我们知道int是4位,打印出来的内存地址刚好是连续的递增4的一组地址。
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-7-5 17:00:54 | 显示全部楼层
本帖最后由 boat7 于 2021-7-5 17:10 编辑
连帅帅 发表于 2021-7-5 15:32
我给你分析下:
p2指向数组temp的首地址(栈中的地址),*p2取出的是栈中第一个元素(也就是1)的栈中 ...


谢谢解答,从根本了解 ,但是我的错误其实更低级一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-5 17:54:27 | 显示全部楼层
boat7 发表于 2021-7-5 17:00
谢谢解答,从根本了解 ,但是我的错误其实更低级一些

加油干,唯一不会辜负你的就是你的努力。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-7-5 18:52:45 | 显示全部楼层
连帅帅 发表于 2021-7-5 17:54
加油干,唯一不会辜负你的就是你的努力。

谢谢,共勉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 17:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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