char *p="aaaaaa";printf("%s",p);輸出:aaaaaa就想問 不是說p中裝的是地址嗎 為啥我沒加*直接輸出 得到的不是地址而是字符串??請(qǐng)賜教!
4 回答
已采納

Must_so
TA貢獻(xiàn)11條經(jīng)驗(yàn) 獲得超18個(gè)贊
你可以去看看《編譯原理》
printf輸出字符串是這樣,對(duì)著那個(gè)地址的字符一直讀,直到遇到'\0'
你可能以為printf("%s");這樣的語句是錯(cuò)誤的,但實(shí)際上是可以編譯的。
給你玩一段代碼:
#include<iostream> #include<cstdio> using?namespace?std; int?main() { char?s[100]; scanf("%s",s); printf("%s"); return?0; }
運(yùn)行結(jié)果是這樣的:
而當(dāng)你將scanf改成用gets輸入則會(huì)出錯(cuò),這個(gè)涉及到scanf等函數(shù)的返回地址和printf的原理
之前一學(xué)長給講過但是如果不懂編譯原理的話也只是記住了而不懂。
如果實(shí)在好奇可以去看編譯原理。
- 4 回答
- 0 關(guān)注
- 1976 瀏覽
添加回答
舉報(bào)
0/150
提交
取消