首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C:条件表达式中的求值顺序

C:条件表达式中的求值顺序
EN

Stack Overflow用户
提问于 2018-02-03 18:22:02
回答 1查看 37关注 0票数 1

有以下C代码:

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>

int main ()
{
    int a[5] = {0, 1, 2, 3, 4};
    int* a_p = a;
    float x = 1.5;

    while(x > (*a_p++))
    {
        printf("*a_p = %d\n", *a_p);
    }

    printf("*a_p = %d", *a_p);
    return 0;
}

问题是,最终的printf语句的结果是什么?我认为命令是:

1)在while内部,a_p地址递增=> *a_p is 1 (a[1])

2) 1.5与1比较

3)在while内部,a_p地址再次递增=> *a_p is 2 (a[2])

4) 1.5与2比较

5) 2是为*a_p打印的

我试过用3个编译器,结果是3。为什么3是正确的结果?首先进行比较,然后指针递增,这意味着在上面的步骤4中,在完成比较之后,*a_p是3吗?这总是这种行为(这个行为是定义的)还是编译器依赖的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-03 18:26:44

是的,这就是岗位加薪的工作方式。while条件对于0th和1th索引是真的,但是当它计算为false时-指针值已经增加了,因此它指向具有值3的索引4

*p++它的值将是*p,其中这个p是不递增的旧pa_p也是如此--上次比较时,*a_p++值是2,但是a_p的新值指向4th索引。循环结束和3被打印出来。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48600536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档