例項1:
#include
using namespace std;
int main()
執行結果:
error!
!!
例項2:
#include
using namespace std;
int main()
執行結果:
helloworld
例項3:
#include
using namespace std;
int main()
執行結果:
h
例項4:
#include
using namespace std;
int main()
執行結果:
error!
!!
例項5:
#include
using namespace std;
int main()
執行結果:
10
說明:
用字元指標宣告的字串,這個指標依然是char*型別的。
他只告訴編譯器,這是個位址,該位址中儲存的變數占用了乙個位元組。
實際使用時,它也代表了字串第乙個字元的首位址。
因此在輸出是使用"%s"可以通過字串的首位址,將字串全部輸出,僅需要傳入這個字串的首位址即可。
而此時正好字串的首位址儲存在了字元指標變數中,因此將這個指標變數直接傳入即可不需要解引用。解引用反而會發生錯誤。
但是您可以嘗試,使用"%c",將字串的首個字元列印出來,此時需要解引用。
具體而言還是要歸結與printf()函式的實現方法,
似乎可以認為,當使用"%s"時編譯器就想知道這個字串的首位址,至於到什麼時候結束,那麼編譯器是否可以通過空字元(\0)來最終確定字串的結束呢?
而其他變數不同於字串,他們都有指定的長度,int就是32位(4位元組),那麼想要把這種型別的資料輸出來,那printf()就規定了,在輸出時,請把該位址中的變數解出來(解引用),直接用實際值作為引數而不是位址。
(斜體部分為個人想法)
字串與指標
字元 0 和 0 的區別字元 0 對應的ascii碼為十六進製制30 而 0 即為ascii碼中的0,其對應字元空字元nul。char c 0 char c 0 nul char c 0 char c 48 最典型如memset函式 void memset void buffer,int ch,si...
字串與指標
printf的第二個引數的型別是由 第乙個引數format決定的。當format為 s時,第二個引數就是乙個位址,printf將位址上的值輸出到stdout。當format為 d時,第二個引數就是乙個int型的變數,printf將變數上值輸出到stdout。1 字串的表示形式 在c語言中,我們可以用...
字串與指標
在c語言中,有兩種方式儲存字串,一種是字元陣列,另一種就是指標形式。第一種,字元陣列 字元陣列儲存字串,可以借助陣列下標值訪問和修改字串中的任意乙個字元。第二種 指標形式儲存字串 一 雙引號的作用 1.申請了空間 在常量區 存放了字串 2.在字串尾加上了 0 3.返回位址,返回的位址給p。以字串形式...