C printf正在产生一种不寻常的反应

C printf正在产生一种不寻常的反应,c,linux,printf,pointer-arithmetic,C,Linux,Printf,Pointer Arithmetic,我正在练习指针算术,但printf语句的响应令人困惑。我的理解是,应该先打印101,然后再进行增量。但问题是 #include <stdio.h> int main() { int a[] = {101, 276, 345}; int *ptr = a; printf ("%d\n%d\n", *ptr, *(++ptr) ); return 0; } 但是,当我将代码更改为以下 #include <stdio.h> int main() { i

我正在练习指针算术,但printf语句的响应令人困惑。我的理解是,应该先打印101,然后再进行增量。但问题是

#include <stdio.h>

int main()
{
int a[] = {101, 276, 345};
int *ptr = a;
printf ("%d\n%d\n", *ptr, *(++ptr) );
return 0;
}
但是,当我将代码更改为以下

#include <stdio.h>

int main()
{
int a[] = {101, 276, 345};
int *ptr = a;
printf ("%d\n", *ptr);
return 0;
}
101

++ptr更改原始指针,请尝试ptr+1而不是++ptr

#include <stdio.h>

int main()
{
int a[] = {101, 276, 345};
int *ptr = a;
printf ("%d\n%d\n", *ptr, *(ptr + 1) );
return 0;
}
#包括
int main()
{
INTA[]={101276345};
int*ptr=a;
printf(“%d\n%d\n”,*ptr,*(ptr+1));
返回0;
}


据我所知,答案应该是101 276欢迎使用未定义的行为-在
printf(“%d\n%d\n”、*ptr、*(++ptr))中由于没有定义参数的计算顺序,
ptr
的值是不确定的——计算顺序是不确定的。是否先应用
++ptr
<代码>printf(“%d\n%d\n”、*a、*(++ptr))就可以了。这和指针算法没什么关系。如果你像那样打印整数,你也会遇到同样的问题。停止练习“聪明”代码,因为它的行为很难一眼就理解。将其分解为更小的步骤,通常使用更多的临时变量。
#include <stdio.h>

int main()
{
int a[] = {101, 276, 345};
int *ptr = a;
printf ("%d\n%d\n", *ptr, *(ptr + 1) );
return 0;
}