| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 672 人关注过本帖
标题:关于指针的问题, 为什么输出结果和我预计的不同呢?
只看楼主 加入收藏
leehermit
Rank: 1
来 自:贵州
等 级:新手上路
帖 子:13
专家分:3
注 册:2011-11-7
收藏
 问题点数:0 回复次数:8 
关于指针的问题, 为什么输出结果和我预计的不同呢?
程序代码:
#include <stdio.h>
int main(void)
{
    int *q, a[3];
    a[0]=4; a[1]=5; a[2]=6;
    q=a;
    //结果居然是输出4 6 5 4?!!! 我想的应该是4 4 5 6吧? 这是什么原因呢...
    printf("%d, %d, %d, %d\n", a[0], *q++, *q++, *q++);
    return 0;
}
2013-07-02 17:07
sikongjuehan
Rank: 2
等 级:论坛游民
帖 子:3
专家分:14
注 册:2013-6-2
收藏
得分:0 
q=a中,a数组,只会把a的第一个值给q
2013-07-02 17:23
yuhaibinhf
Rank: 2
等 级:论坛游民
帖 子:34
专家分:29
注 册:2011-4-7
收藏
得分:0 
#include <stdio.h>
int main(void)
{
    int * q, a[3];
    a[0] =4 ; a[1] = 5; a[2] = 6;
       q = a;
    //结果居然是输出4 6 5 4?!!! 我想的应该是4 4 5 6吧? 这是什么原因呢...
    printf("%d, %d, %d, %d\n", a[0], *q, *(q + 1), *(q + 2));
    return 0;
}
2013-07-02 18:45
YJ_Hao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:215
专家分:609
注 册:2013-3-22
收藏
得分:0 
VC上运行结果是4,4,4,4
2013-07-02 18:46
leehermit
Rank: 1
来 自:贵州
等 级:新手上路
帖 子:13
专家分:3
注 册:2011-11-7
收藏
得分:0 
回复 4楼 YJ_Hao
那我在C-Free的结果是 4 6 5 4 是肿么回事呢 - -
2013-07-02 19:35
leehermit
Rank: 1
来 自:贵州
等 级:新手上路
帖 子:13
专家分:3
注 册:2011-11-7
收藏
得分:0 
回复 3楼 yuhaibinhf
谢啦... 关键我是好奇为什么这样会输出4 6 5 4...
2013-07-02 19:36
leehermit
Rank: 1
来 自:贵州
等 级:新手上路
帖 子:13
专家分:3
注 册:2011-11-7
收藏
得分:0 
回复 4楼 YJ_Hao
*q++; q的指向不会进一个么... 难道下一个*q++; q还是指向第一个么... 肿么回事...
2013-07-02 19:44
yuhaibinhf
Rank: 2
等 级:论坛游民
帖 子:34
专家分:29
注 册:2011-4-7
收藏
得分:0 
这个问题,,,*(q + 1) 意思是 在 q 当前的位置上后移一位,也就是指向
q的 后一位,因为 q 即 a[0], a[0] 的后一位是 a[1],同理, *(a + 2) ==> a[2]
至于 * q++, 我刚才也试过了,写成 *(q++) 也不行,分析 可能是因为 q++ 是自加运算
而 指针 是指向问题,你要的是 指针地址后移, 所以单纯的 数据 自加 行不通,呵呵
我也刚学完谭浩强的书,打算进一步学习,共同切磋,,,
2013-07-02 19:54
leehermit
Rank: 1
来 自:贵州
等 级:新手上路
帖 子:13
专家分:3
注 册:2011-11-7
收藏
得分:0 
回复 8楼 yuhaibinhf
我问其他人搞懂了. printf的参数执行顺序是从右往左的! 这样就解释的通了, *q++ 先是指向第一个也就是4, 接着加1, 指向下一个了, 所以最后输出的结果是反过来的, 也就是6 5 4. 还有*q++跟编译器有关系, 理论上是会取值并移动一位的. 非常感谢, 共勉!
2013-07-02 20:28
快速回复:关于指针的问题, 为什么输出结果和我预计的不同呢?
数据加载中...
 
   



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

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