| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 502 人关注过本帖
标题:帮忙解释下关于指针的问题,小弟对于内存不甚了解
只看楼主 加入收藏
zhonganyun0
Rank: 2
等 级:论坛游民
帖 子:31
专家分:18
注 册:2012-7-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
帮忙解释下关于指针的问题,小弟对于内存不甚了解
这个程序错误有好几种改法:请问这个程序为什么不能达到目的,望详解

#include<stdio.h>
void main()

{
int *p,i,a[10];
p=a;
for(i=0;i<=9;i++)
{

scanf("%d",p++);
}

printf("\n");

for(i=0;i<=9;i++,p++)
{

printf("%d\n",*p);
}


}
改法1:
#include<stdio.h>
void main()

{
int *p,i,a[10];
p=a;
for(i=0;i<=9;i++)
{

scanf("%d",(a+i));
}

printf("\n");

for(i=0;i<=9;i++,p++)
{

printf("%d\n",*p);
}


}
改法2:
#include<stdio.h>
void main()

{
int *p,i,a[10];
p=a;
for(i=0;i<=9;i++)
{

scanf("%d",p++);
}

printf("\n");

for(i=0;i<=9;i++,p++)
{

printf("%d\n",a[i]);
}


}


[ 本帖最后由 zhonganyun0 于 2012-7-26 15:43 编辑 ]
搜索更多相关主题的帖子: include void 
2012-07-26 15:39
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
收藏
得分:7 
哈哈,楼主你第一个输入是正确的,但输出时p不再指向a了,而是跑到a后面去了,打出来当然不对。可以在
printf("\n");
后面加上
p=a;
2012-07-26 15:56
LShang
Rank: 4
来 自:China
等 级:业余侠客
威 望:3
帖 子:183
专家分:258
注 册:2010-12-24
收藏
得分:7 
程序代码:
#include<stdio.h>
void main()

{
int *p,i,a[10];
p=a;    /* 将指针p赋值为数组a地址,也就是p = &a[0]; */
for(i=0;i<=9;i++)
{

scanf("%d",p++);    /* 根据指针运算的规则,每执行一次p++;p的值增加一个int字长。根据p的值,p依次等于&a[1],&a[2],&a[3]...&a[9],执行最后一次scanf后,p再自加一次,此时为&a[10],越界了 */
}

printf("\n");

for(i=0;i<=9;i++,p++)
{

printf("%d\n",*p);    /* 已经越界了,所以打印出来的自然是错误的值 */
}


}

另外楼主的改法1可以,改法2里第二个for循环的p++是没有用处的

[ 本帖最后由 LShang 于 2012-7-27 14:21 编辑 ]

学如逆水行舟,不进则退
士不可以不弘毅,任重而道远
2012-07-26 16:04
zhonganyun0
Rank: 2
等 级:论坛游民
帖 子:31
专家分:18
注 册:2012-7-26
收藏
得分:0 
回复 3楼 LShang
很详细,,,谢谢,想了半天绕不出来,一语惊醒梦中人
2012-07-26 16:11
zhonganyun0
Rank: 2
等 级:论坛游民
帖 子:31
专家分:18
注 册:2012-7-26
收藏
得分:0 
回复 3楼 LShang
额,,,对了,,按你的思路,那么第二个for循环里第一次打印的值应该是啊a【9】.可打印结果却是乱码
2012-07-26 16:14
zhonganyun0
Rank: 2
等 级:论坛游民
帖 子:31
专家分:18
注 册:2012-7-26
收藏
得分:0 
回复 2楼 stophin
谢谢,,,看了三楼在看你的回复才明白了,,,哈哈
2012-07-26 16:17
LShang
Rank: 4
来 自:China
等 级:业余侠客
威 望:3
帖 子:183
专家分:258
注 册:2010-12-24
收藏
得分:0 
以下是引用zhonganyun0在2012-7-26 16:14:30的发言:

额,,,对了,,按你的思路,那么第二个for循环里第一次打印的值应该是啊a【9】.可打印结果却是乱码

唔 大意了 scanf("%d",p++);
在执行最后一次之后p的值在输入之后还会再自加一次
所以这时候已经越界了
误导了,对不起啊

学如逆水行舟,不进则退
士不可以不弘毅,任重而道远
2012-07-26 16:31
快速回复:帮忙解释下关于指针的问题,小弟对于内存不甚了解
数据加载中...
 
   



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

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