根據
指標用法: * 定義乙個指標, &取
變數位址
,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 #includeusing
namespace
std;
intmain()
輸出:
now use cout to print *m1=cnow 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要做的改變常量,所以程式編譯的時候沒錯,執行...