1樓:滄海雄風
char *str;str="abcdef";
str指向常量區,指向的內容不能改了
char str="abcdef";
在棧區,可以改變
首先第一個指標形式的str指向一個字串,這樣指向以後就不能通過str對abcdef這個字串修改了,但是你可以給str用別的字串再賦值,這樣他就指向了別的字串,但是一旦指向某個字串,就不能通過這個指標對字串修改了。
第二種陣列形式的str,其實陣列名就是指標常量,也就是說一旦他初始化了,它指向的地址就固定了,就不能再用別的字串賦值了(這就不同於指標形式的str),但是這個地址裡放什麼是可以改變的(指標形式的就不能改變了),比如說初始化之後在通過cin>>str改變陣列的內容還是沒有問題的。
char str="abcdef";這種寫法是沒有問題的,這樣不寫陣列大小但必須要對其初始化,如果沒初始化就必須宣告陣列大小。
char *str = "abcde"; 與 char str[] ="abcde"; 有何區別?
2樓:泠月冰辰
區別還是很大的。
1,char *str這個沒有實際的記憶體空間,所指的只是"abcde"字串而已,所以不能修改其值. 而char str這個是真正的把"abcde"儲存在了記憶體中,有實際記憶體空間,所以,可以修改.
2,以指標角度來看,char *str指標可以移動(可以進行str++,str--),但是char str不能移動.因為陣列可以看成一個常指標.
3,大小.. 凡是指標,32位系統均是4個位元組.也就是char *str="abcde";
sizeof(str)為4;
而陣列卻可以得出其實際大小.
char str="abcde";
sizeof(str)為6(末尾'\0'字元);
當然,strlen(str)都是一樣的為5.
3樓:發假或一半訊息絕戶
不一樣,char *str = "abcde"; 這個定義出來的是個常量,char str ="abcde"; 這個定義的是陣列,你要不相信的話,可以做個簡單的聯絡
char *str = "abcde"; str[1] = "b";這個就是錯誤的,而第二個就可以
4樓:匿名使用者
一樣的,str紀錄的都是頭指標
5樓:李維建
區別就大了,一個是指標,一個是陣列。
6樓:匿名使用者
兩者是一樣的,陣列名即為一個指標
c語言 char *str 與char str[] 這倆種定義字串到底有什麼區別
7樓:園林植物手冊
一、概念不同
char *str 宣告的是一個指標,這個指標可以指向任何字串常量。char str 宣告的內是一個字元陣列容,陣列的內容可以是任何內容,嚴格意義上說,末尾加上'\0' 之後才能算是字串,
二、變數不同
char *str裡的str是指標變數,str的值未初始化(區域性變數的話。全域性則自動初始化為null)。char str[ ]裡str是地址常量,str的值是str[ ]的地址。
三、定義方法不同:
在char * str中,明顯str的型別是char*。這沒什麼特殊的,只是一個簡單的char指標。char str是不能這樣定義的,所以假定用char str[6] = "abcde";那麼這裡str的型別是char[6](6個,不是5個,因為最後有個0) ,而這種定義語句也是定義一個char[6]型別的唯一方法。
8樓:這自來水來自這
char *str; 這裡str是指標變數,來str的值未初源
始化(區域性變數的話。bai全域性則du自動初始化為null)char str[10]; 這裡zhistr是地址常量,daostr的值是str[0]的地址
9樓:匿名使用者
兩者都代表bai一個字元陣列存du儲空間的首地址,zhi區別在:
char *str;
這個變數可dao以進行指標運算,比如
回:答str++;
str--;
但如果定義成:
char str;
則str++這樣的語句是錯誤的,這個首地址不得進行賦值計算。
在不改變str指標指向地址的情況下,下面的語句是一樣的結果。
printf("%s",str+2);
10樓:
第一種為定義一個指標變數;
第二種為定義一個陣列;
如果定義時為其賦初始值,如char *str1 = "hello world!
11樓:匿名使用者
而且char *str中str更方便活用因為是變數 所以可以進行多重操作,從某種意義上說,一般採用第一種方式去定義一個字串,,注意下越界和初始化的問題就好了
12樓:匿名使用者
char *str 宣告的是一個指標,這個指標可以指向任何字串常量;
char str 宣告的是一個字元陣列,陣列的內容可以是任何內容,嚴格意義上說,末尾加上'\0' 之後才能算是字串
char **str和char *str[]有什麼區別?
13樓:匿名使用者
**str右邊的*表示
來指向每一個字串第一自個字元的bai地址,du左邊的*表示指向第一個字串的zhi地址。
const char **str 或 char const **str可以定義dao,const不區分前後順序,意義都是表示str是常量(不能賦值)。
只能定義char *str[5]而不能定義char *str,因為編譯時程式不能確定str陣列有幾維。
char *str[5]表示字串陣列,陣列數量是5,既是5個string又是一個string array,每個string不限字元個數。
14樓:千鋒教育
兩者都代復表一個字元陣列儲存制
空間的首地址,bai區別在於du
char *str;
這個變數可以進zhi行指標運算,比如:daostr++;
str--;
但如果定義成:
char str;
則str++這樣的語句是錯誤的,這個首地址不得進行賦值計算。
在不改變str指標指向地址的情況下,下面的語句是一樣的結果。
printf("%s",str+2);
char str[]="abcd"與char str[]={'a','b','c','d'}一樣嗎?
15樓:匿名使用者
不一樣。
char str="abcd" 這個屬於字串陣列,末尾以"\0」結束。
char str=這個是字元陣列,陣列裡有4個元素。
一個是字串,一個是字元,所佔的記憶體也不同。
c中你可以用 sizeof(陣列名)測試。不同軟體會有不同的答案,不過並不影響判斷。
16樓:風z使者
不一樣,不信可以試試:sizeof(str)看看是不是相同就是了(搞錯了,這樣返回的是指標的大小...不能做判斷依據)
用了char str="abcd"," "會自動加\0在最後
編譯器會給字串最後加個\0,表示字串的結束,以便輸出字串的時候知道什麼時候結束
17樓:匿名使用者
不一樣c literal 字串有一個\0結束符。
char str="abcd" 等價於 char str=,實際上佔用5bytes記憶體。
char str= 佔用4bytes記憶體。
c語言裡char* str和char *str的區別 80
18樓:尺蠖丨蚩
你是想問char *str【】和char str【】【】這個吧....
華為c8818和榮耀4c哪個好,榮耀4c和華為c8818有何區別
華為c8818和榮耀4c哪個好?華為c8818和榮耀4c哪個好?華為c8818和榮耀4c哪個好?華為c8818和榮耀4c哪個好?江南朦朧的煙雨,總能勾起對一個人的思念。在生命空白的書頁裡,我們填充著自己,漂染不一樣的顏色,塗抹不一樣的煙火。直到有一天,靈魂寧靜如拂曉的幽蘭,等待那一刻的綻放。席慕容說...
C1和C2駕照有什麼區別,駕照C1和C2有什麼區別?
一 準駕的車型 c1是小型 微型載客汽車以及輕型 微型載貨汽車 輕 小 微型專項作業車 c2是小型 微型自動擋載客汽車以及輕型 微型自動擋載貨汽車 二 準駕的其他車型 c1是c2 c3 c4 c1是隻能開c2,無其他準駕車型 三 每年體檢 c1是70週歲以上的機動車駕駛人 含70週歲 應當每年進行一...
c語言r n和n區別,C語言 r n和 n區別?
在baic語言中,除了表示除法和註釋符號du,換行和轉義字zhi符都是使dao用反斜槓的,所以內這裡的斜槓容應該指的是反斜槓。r n是回車加換行,n是換行。要注意的是 r是回車,操作在當前行,而 n則是跳到下一行。c語言是計算機語言的一種,屬於計算機語言的高階語言。計算機語言還分為機器語言,組合語言...