使用指针时输出不同于预期

时间:2014-01-29 10:10:07

标签: c

我无法弄清楚我得到输出的原因: -

    int ar[5] = {1, 3, 5, 7, 9};
    int *p = ar;
    printf("%d\t%d\n", *p, *(p++));

输出:3 1

但我预料到: 1 3 因为p指向第一个元素而p ++指向第二个元素。

3 个答案:

答案 0 :(得分:7)

未指定函数参数的评估顺序。

答案 1 :(得分:0)

从右到左评估的顺序首先评估*(p ++)并增加地址然后评估现在指向下一个元素的* p。尝试*(p + 1)而不是它。

答案 2 :(得分:0)

这给出了一个很好的例子,说明了函数参数的评估顺序 没有被授予。

Parameter evaluation order before a function calling in C