c 中關於char型變數與字串位址的輸出

2021-07-23 15:50:29 字數 1042 閱讀 7979

參考至:

在c裡面如果指標是乙個基本數值型

int ,foalt ,long等,如果輸出裡有

cout << ptr << endl;

其中ptr是指標的名,則輸出的值是指標的位址,

如果是char * (char指標) 則輸出的是char指標的值。

在c++中,熟悉int和char型的變數是最基本不過的了,不過,我想,很多初學者會跟我一樣,搞不懂如何輸出乙個char變數的位址?就舉下面乙個例子:

int i=97;

char c='a';

cout<<"line 1:i="我想,對於line 1的輸出結果是沒有任何疑問的,而且,我想對於初學指標的朋友來說,你可能也會跟我一樣,毫不猶豫的認為輸出的會是兩個位址,可是,你只答對了一半!

的確,line 2中的&i輸出的是int變數i的位址,可是,當你看到執行結果的時候,你是不是應該會很驚訝:為什麼&c輸出的卻是乙個亂碼?

首先,我想先介紹一下在c++中字串的基礎知識。

在c++中,字串是以空終止符('\0')結尾的字元陣列,通過字串中第乙個字元的指標訪問字串。也就是說,字串的值是字串中第乙個字元的(常量)位址。如下的面3種形式表示:

char *str="string";

char str2="string2";

charstr3=;

cout<<"line 3:str="執行可知,這3行的輸出就是儲存的字串的值,而並非我們認為的位址。那麼,我們可以聯絡到前面&c,其實這就是乙個char *的變數,所以,輸出的自然就應該是字串的值。可是,&c儲存的字串是沒有終止符的,因此輸出的也就是亂碼了。

最近,在讀到《c++程式設計教程》(第4版)第12章的時候,我才解決了這個疑惑。實際上,任何程式設計師希望輸出為位址的指標變數都要作乙個轉換,即強制char *轉換成void *,那麼,char型變數和字串的位址就可以以十六機制的格式輸出了,如下所示:

cout<<"line 6:static_cast(&c)="<(&c)此時,可以看到輸出的結果就是char型別變數和字串變數的位址了。

總結: 都是 cout 惹的禍!

c 關於char型變數與字串位址的輸出

在c裡面如果指標是乙個基本數值型 int foalt long等,如果輸出裡有 cout ptr endl 其中ptr是指標的名,則輸出的值是指標的位址,如果是char char指標 則輸出的是char指標的值。int i 97 char c a cout line 1 i 我想,對於line 1的...

關於字元型char變數

寫程式時,意外發現個很不容易察覺問題出在哪的問題的 scanf c ch scanf c c printf ch c n ch printf c c n c 如果輸入是 a b 那麼輸出會是 ch a c 問題出在哪?如果將 改為 scanf c ch scanf c c printf ch c n...

字串指標與char型指標陣列

一 字串指標 字串是一種特殊的char型陣列,指向char型別陣列的指標,就是字串指標。與普通指標一樣,字串指標在使用前也必須定義。字串與char陣列的區別在於長度,字元會自動在尾部加上乙個長度 0 而char型陣列的長度就是其字元的個數。字串長度是字元個數 1。例 二 char型指標陣列 指標陣列...