char straaaaaa 和char straaaa 有啥區別

2022-10-01 07:46:39 字數 4002 閱讀 7243

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語言是計算機語言的一種,屬於計算機語言的高階語言。計算機語言還分為機器語言,組合語言...