有以下C代码:
#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吗?这总是这种行为(这个行为是定义的)还是编译器依赖的?
发布于 2018-02-03 10:26:44
是的,这就是岗位加薪的工作方式。while条件对于0
th和1
th索引是真的,但是当它计算为false时-指针值已经增加了,因此它指向具有值3
的索引4
。
*p++
它的值将是*p
,其中这个p
是不递增的旧p
。a_p
也是如此--上次比较时,*a_p++
值是2
,但是a_p
的新值指向4th
索引。循环结束和3
被打印出来。
https://stackoverflow.com/questions/48600536
复制