| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 425 人关注过本帖
标题:求教指针问题
只看楼主 加入收藏
huang1982
Rank: 2
等 级:论坛游民
帖 子:25
专家分:29
注 册:2012-2-13
结帖率:100%
收藏
已结贴  问题点数:1 回复次数:3 
求教指针问题
int a[3];
int * p = a, i;
for(i=0; i<3; ++i)
    scanf("%d",++p);
printf("%d\n",*p);

可以执行,但显示内存什么错误,为什么呢?3次循环完了 P 是指向元素 a[3],输出*p应该没错啊?
++p和p++在这里用有区别吗?
求教

[ 本帖最后由 huang1982 于 2012-2-21 22:16 编辑 ]
2012-02-21 21:59
sanjianfei
Rank: 2
等 级:论坛游民
帖 子:48
专家分:53
注 册:2012-2-21
收藏
得分:0 
你应该是给数组a[3]赋值  但 scanf("%d",++p); ++p 是地址 *p 没有指向任何数;
++p与p++ 再没等号出现的时候一样,有了等号比如 s=++p与s=p++,
第一个s=p+1 第二个 s=p;
我是初学者,希望对你有帮助;
 
2012-02-21 22:39
慕羿
Rank: 4
等 级:业余侠客
帖 子:40
专家分:206
注 册:2012-2-16
收藏
得分:1 
把代码改成这样就能得到你想要的结果了:
程序代码:
    int a[3];
    int * p = a, i;
    for(i=0; i<3; ++i)
        scanf("%d",p++);
    p--;
    printf("%d\n",*p);

出现错误的原因:
++p的意思是先把p增量,然后再用于后续计算。这样,a[0]里你什么也没存进去,第一次运行的时候你把数据存在了a[1],最后一次你把数据存在了a[3]位置上。这个位置已经超出数组范围了,所以系统会报错。

至于你的printf("%d\n",*p);还会输出最后一个数据,是因为c在指针上写入时不检查越界,所以那个位置上还是被你存进了数据——但操作系统会发现这个错误,因为程序写入了尚未分配给它的栈空间。
2012-02-22 11:19
yxiangyxiang
Rank: 3Rank: 3
来 自:/\/\/\/\/
等 级:论坛游侠
帖 子:130
专家分:186
注 册:2012-1-29
收藏
得分:0 
main()
{
    int a[3];
    int * p = a, i;
    for(i=0; i<3; ++i)
        scanf("%d",p++);
    p = a;
    for( i=0; i<3; i++ )
        printf("%d\n", *p++);
}
2012-02-22 12:54
快速回复:求教指针问题
数据加载中...
 
   



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

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