| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1975 人关注过本帖
标题:数组与指针相关的改错问题,求解为什么要这样改
只看楼主 加入收藏
jianggehappy
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2018-4-22
结帖率:0
收藏
已结贴  问题点数:20 回复次数:13 
数组与指针相关的改错问题,求解为什么要这样改
要求是输入数组中的所有元素。
原题代码
程序代码:
#include "stdio.h"
main(){
int *p,i,a[10];
p=a;
for(i=0;i<10;i++)
*p++=i;
for(i=0;i<10;i++)
printf("a[%d]=%d\n",i,*p++);
}

改正后的代码:(求解为什么还要加一个p=a前面不是已经赋值了吗)
程序代码:
#include "stdio.h"
main(){
int *p,i,a[10];
p=a;
for(i=0;i<10;i++)
*p++=i;
p=a;//这里加一个p=a就正确了?
for(i=0;i<10;i++)
printf("a[%d]=%d\n",i,*p++);
}
搜索更多相关主题的帖子: 数组 指针 改错 for i++ 
2018-05-22 17:44
dzy123
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:379
专家分:820
注 册:2013-4-18
收藏
得分:4 
我的理解是要将指针重新指向数组首地址。因为经过赋值后已经指向了a[9]了。
2018-05-22 17:58
北天星辰
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2018-5-21
收藏
得分:4 
for循环遍历赋值之后,指针p指向的是a[9]。跳出循环后,p的指向没有变,此时你输出*p++就相当于从a[9]开始了。所以重新指向数组首地址才能正常输出。我的理解和2楼一致。。
2018-05-22 18:12
jianggehappy
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2018-4-22
收藏
得分:0 
回复 2楼 dzy123
是这样,但是我就是想不通后面好像也没调用p了啊,为什么还要让它回到初始值
2018-05-22 18:12
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:541
专家分:1178
注 册:2016-9-17
收藏
得分:4 
你可以这样看


#include "stdio.h"
main(){
int *p,i,a[10];
p=a;                    //p的值为a[0]的地址
for(i=0;i<10;i++)
*p++=i;
                        //运行到这p的值为a[0]的地址加上9也就是a[9]的地址
for(i=0;i<10;i++)
printf("a[%d]=%d\n",i,*p++);//p又一次增加,*p指向的是a[9]的地址后10个地址里的值,但这10个值你没有定义,一般是系统随机值
                            所以需要在空格处添加p=a;

穷举是最暴力的美学
2018-05-22 18:12
jianggehappy
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2018-4-22
收藏
得分:0 
回复 5楼 nosnoy
对对对,知道了。输出中还有个p++。
2018-05-22 18:18
jianggehappy
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2018-4-22
收藏
得分:0 
回复 3楼 北天星辰
知道了,谢谢。
2018-05-22 18:20
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:4 
虽然问题解决了
但是你们的讨论都搞错一点
第一次循环之后 p是指向 a[10]
不是9

https://zh.
2018-05-22 18:45
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:541
专家分:1178
注 册:2016-9-17
收藏
得分:0 
回复 8楼 lin5161678
好像是的p++表示先取值在操作

穷举是最暴力的美学
2018-05-22 19:14
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
收藏
得分:4 
以下是引用lin5161678在2018-5-22 18:45:47的发言:

虽然问题解决了
但是你们的讨论都搞错一点
第一次循环之后 p是指向 a[10]
不是9

哥哥,不存在a[10]
2018-05-22 19:40
快速回复:数组与指针相关的改错问题,求解为什么要这样改
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018255 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved