所以我有这个main
:
#define NUM 5
int main()
{
int a[NUM]={20,-90,450,-37,87};
int *p;
for (p=a; (char *)p < ((char *)a + sizeof(int) * NUM); ) //same meaning: for (p=a; p<a+NUM;)
*p++ = ++*p < 60 ? *p : 0; //same meaning: *(p++)=++(*p)<60?*p:0;
for(p=a; (char *)p < ((char *)a + sizeof(int) * NUM); )
printf("\n %d ", *p++);
return 0;
}
而且我需要找到什么输出。
因此,在尝试不加理解的情况下,我运行了它,这是输出:
21
-89
0
-36
0
因此,我很乐意向您解释如何解决此类问题(我很快就会参加考试,并且可能会看到这类问题。)
编辑:
首先,我想了解第一个
for
语句在做什么:此跳转1
integer
吗?以及块内发生了什么?*p++
和++*p
有什么区别 最佳答案
该问题与Why are these constructs (using ++) undefined behavior in C?相似,尽管由于?:
运算符内的(细微)序列点,所以并非完全相同。
由于程序包含未定义的行为,因此没有可预测的输出。
尽管由于++*p
运算符的内部序列点,与*p
相比,子表达式?:
的排序方式明确,但是对于子表达式的其他组合而言,情况并非如此。最值得注意的是,未指定对=
的操作数的求值顺序:
C11 6.5.15 / 3:
操作数的评估是无序列的。*p++
没有相对于++*p
排序。子表达式的求值顺序未指定,并且由于同一变量上存在多个未排序的副作用,因此行为是不确定的。
同样,相对于*p++
,*p
也没有顺序。这也会导致不确定的行为。
简介:该代码已损坏,并且充满错误。什么都可能发生。谁给你的任务是无能的。
关于c - C语言:查找给定程序的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48638821/