從我所瞭解的'&'運算符開始,它返回內存中操作數的基地址。瞭解'&'運算符
讓我們想象一下以下情形(如我的機器上):
- 的sizeof(INT)= 4個字節
- 的sizeof(浮動)= 4個字節
- 的sizeof(焦炭)= 1個字節
現在,如果我寫的東西是這樣的:
void main() {
int i = 5411;
int *ip = &i;
char *c = &i;
printf("%d",*ip);
printf("%c",*c);
}
第一個printf()應該給我5411.說到第二個printf(),我的基地址包含10101001(char類型指針的高階8位= 1字節)。 因此* c應該給我169,當它轉換成%c時是一個無效的字符。
但編譯器給我'#'或其他有效的輸出。爲什麼這樣?任何投入?
編輯(從作者的評論答案的一個拍攝):
這只是一個虛擬的情況下,因爲我是從實際的機器了。
實際情況是我= 5411
在任何情況下,如果您嘗試「打印」「字符」,它將顯示爲字符,而不是相應的整數代碼。 – 2010-10-31 20:20:56
可能與使用字符編碼有關,我猜想。 – 2010-10-31 20:21:48
是的,我也同意這一點。但是必須有一個從上一次printf()獲得'#'值的理由。這不是垃圾值。 – 2010-10-31 20:23:03