指向字串的指標在printf與cout區別

2022-07-29 12:03:11 字數 1927 閱讀 1655

根據

指標用法: * 定義乙個指標, &取

變數位址

,int b = 1;

int *a = &b;

則*a =1,但對於

字串而言並非如此

,直接列印

指向字串的指標列印的是

位址還是字串本身,具體看情況

。定義:

char *m1 = "coconut is lovely";  

char *m2 = "passion fruit isnice";  

char *m3 = "craneberry is fine";  

注:實際宣告應該是const char *m1,原因char *背後的含義是:給我個字串,我要修改它,此處應該是要讀取它,具體

參考測試

輸出:用cout 列印*m1:

cout<<"now use cout to print *m1="<<*m1<

列印輸出:

now use cout to print *m1=c

即輸出m1指向

字串的第乙個字元

用cout列印

m1:

cout<<"now use cout to print m1="《輸出:

now use cout to print m1=coconut is lovely

即輸出m1所指的內容,而不是

m1指向的位址

用printf列印%c\n", *m1:

printf("now use printf to print *m1=%c\n", *m1);

輸出:now use printf to print *m1=c

即為m1指向的字串的第一位的內容

,但注意是

%c而不是

%s。因為是字元型,而非字串型。所以以下表達錯誤

: printf("now use printf to print *m1= %s\n", *m1);

用printf 列印 %d m1

printf("now use printf to print m1=%d\n", m1);

輸出:now use printf to print m1=4197112

即m1是指標,輸出

m1所指向的位址。上面例子中的

cout《輸出的是字串內容。二者不一致,似乎反常了。但是我們可以使得它們行為一致。如下

:用printf列印%s m1:

printf("now use printf to print m1= %s\n",m1);輸出:

now use printf to print m1= coconut is lovely

即m1是指標,輸出

m1所指向的位址。

使用%s而非

%d就可以使得

m1不去表示位址而去表示字串內容。完整

例子:

#include #include 

using

namespace

std;

intmain()

輸出:

now use cout to print *m1=c

now use cout to print m1=coconut is lovely

now use cout to print m1=4197320

now use printf to print *m1=c

now use printf to print m1=4197320

now use printf to print m1= coconut is lovely

ref:

C語言 字串指標(指向字串的指標)

字串一旦被建立就存在於常量池中。以字元陣列形式建立的字串,實際上是從字串常量池中複製了乙個副本,所以修改字元陣列的內容時,只是修改的自己的副本,並不會影響到常量池中的字串。而對字串指標strp操作時會影響到常量池中的字串 char strc string char strp string print...

擷取指定字串(指標指向)

問題 如字串 const char bb abcdef dsfads 如何擷取 號以前的字串 abcdef 不錯的回答 char nn abcdef const char bb abcdef dsfads intilen 0 char piterator bb while 1 ilen char p...

指標指向字串和陣列儲存字串區別

include void main 定義了乙個指向字串的指標,str是在棧上分配的變數,儲存的位址對應的是在常量區中分配的空間。aafg 是儲存在常量區裡面,是不能改變的。char str 其實存在一種 const char 型別的隱式轉換,而strcpy要做的改變常量,所以程式編譯的時候沒錯,執行...