給定的程序是否定義良好?C程序混淆
#include <stdio.h>
int main()
{
int a=2,*f1,*f2;
f1=f2=&a;
*f2+=*f2+=a+=2.5;
*f1+=*f1+=a+=2.5;
printf("\n%d %d %d\n",a,*f1,*f2);
return 0;
}
給定的程序是否定義良好?C程序混淆
#include <stdio.h>
int main()
{
int a=2,*f1,*f2;
f1=f2=&a;
*f2+=*f2+=a+=2.5;
*f1+=*f1+=a+=2.5;
printf("\n%d %d %d\n",a,*f1,*f2);
return 0;
}
編輯 - 當我說操作的括號控制順序時,我完全錯了。安德烈正確地糾正了我。 我發佈的原始代碼也有未定義的行爲。這是我的第二次嘗試。 我原來的帖子也在這個下面,所以可以看到更正。
將變量聲明分解爲多行是很好的編碼實踐,以便您可以看到發生了什麼。
//此代碼是具有指針的實驗
#include<stdio.h>
int main()
{
int a=2; //initialize a to 2
int *f1;
int *f2;
f1 = &a; //f1 points to a
f2 = &a; //f2 points to a
a += 2.5;
*f1 += a;
*f1 += a;
*f2 += a;
*f2 += a;
printf("\n%d %d %d\n",a,*f1,*f2);
return 0;
}
結果印刷品64 64 64
//我以前不正確的代碼如下:
的#include
int main()
{
int a=2; //initialize a to 2
int *f1;
int *f2;
f1 = &a; //f1 points to a
f2 = &a; //f2 points to a
a += 2.5; //2.5 + 2 = 4.5, but 4.5 as an int is 4.
*f1 += (*f1 += a); //4 + 4 = 8. 8 + 8 = 16.
*f2 += (*f2 += a); //16 + 16 = 32. 32 + 32 = 64.
printf("\n%d %d %d\n",a,*f1,*f2);
return 0;
}
結果打印64 64 64
您應該使用括號來確保首先發生哪些操作。希望這可以幫助。首先是 。希望這可以幫助。
這功課嗎? – alex 2010-09-24 02:10:37
[任何人都可以解釋這些未定義的行爲(i = i ++ + ++ i,i = i ++等)]的可能的重複(http://stackoverflow.com/questions/949433/could-anyone-explain-these -undefined-behaviors-iiiii-etc) – 2010-09-24 06:57:43