可能重复:
C programming: is this undefined behavior?
Is this program having any sequence point issues ?
您好,
我正在运行以下程序
void print(int *a, int *b, int *c, int *d, int *e)
{
printf("\n %d %d %d %d %d",*a,*b,*c,*d,*e);
}
int _tmain(int argc, _TCHAR* argv[])
{
static int arr[] = {97,98,99,100,101,102,103,104};
int *ptr=arr+1;
print(++ptr,ptr--,ptr,ptr++,++ptr);
getchar();
return 0;
}
我以为我会以99 99 98 98 100
作为输出,但我得到100 100 100 99 100
作为输出。我不明白为什么。当与++或 - (pre或postfix)运算符一起使用时,指针的行为与正常变量不同。你可以帮我理解程序是如何工作的吗
答案 0 :(得分:5)
您在没有序列点的情况下多次阅读和修改ptr
。这是未定义的行为。编译器可以发出任何感觉的代码。不要这样做。
另请注意,函数参数的评估顺序未定义,因此即使print
语句定义明确,也不一定会输出您认为的语句。
有关类似问题,请参阅此问题Is this undefined behavior。