如果機器是32位little-endianess並且sizeof(int)是4字節。以下哪項是以下程序的正確輸出?
考慮下面的程序:
line1: #include<stdio.h>
line2: {
line3: int arr[3]={2,3,4};
line4: char *p;
line5: p=(char*)arr;
line6: printf("%d",*p);
line7: p=p+1;
line8: printf("%d\n",*p);
line9: return 0;
}
什麼是預期的輸出?
A
:2 3
B
:2 0
C
:1 0
D
:垃圾值
一件事困擾我的整數指針的澆鑄到一個字符指針。
該鑄件有多重要?
編譯器在第5行做什麼? (
p = (char *) arr;
)第7行發生了什麼? (
p = p + 1
)如果輸出是
20
那麼0
是如何打印出來的?
@EricJ。其實我編譯它在我的機器上,並得到2 0作爲輸出? – kTiwari 2012-07-25 15:27:59
在SPARC或其他big-endian機器上編譯它,你應該得到'00' - 這個代碼的行爲是依賴於平臺和編譯器的。 – twalberg 2012-07-25 15:31:45
這個問題沒有意義,因爲無論是endianess還是編譯器,也沒有提到'sizeof(int)'。 – RedX 2012-07-25 15:32:23