今天寫了個(gè)程序
#include<stdio.h>
int max(int a,int b)
{
if(a>b)
{
//printf("In func max():%d %d \n",a,b);
return a;
}
else {
//printf("In func max():%d %d \n",a,b);
return b;
}
}
void jubu_test(void)
{
int a=1;
int b=2;
printf("maxab()=%d after max: a=%d b=%d \n",max(a++,b++),a,b); //a=2,b=3
}
int c=2;
int d=1;
void quanju_test(void)
{
printf("maxcd()=%d c=%d d=%d \n",max(c++,d++),c,d); //c=2,d=1
c=2;
d=1;
int f=max(c++,d++);
printf("maxcd()=%d after max: c=%d d=%d \n",f,c,d); //c=3,d=2
}
int main(int argc, char** argv)
{
jubu_test();
quanju_test();
}
問(wèn)題是劫瞳,為什么 quanju_test 函數(shù)里面兩個(gè)printf 打印的結(jié)果不一樣?我一直以為是 全局變量的問(wèn)題或者是pritntf的問(wèn)題健盒,直到我上 stackoverflow搜了一下酝豪,發(fā)現(xiàn)我竟然不知道
++ 運(yùn)算符使用不當(dāng)會(huì)造成 “”未定義的行為“”
比如這個(gè)語(yǔ)句的執(zhí)行結(jié)果:
int a[] = {1, 2, 3};
int * pa;
pa = &a[0];
printf("a[0] = %d\ta[1] = %d\ta[2] = %d\n",*(pa), *(pa++),*(++pa));
/* Result: a[0] = 3 a[1] = 2 a[2] = 2 */
我試了一下就蒙蔽了2333
有人解釋:
function parameters are not evaluated in a defined order in C.
這是事實(shí)。渊鞋。