char* str = "abcd"; char str[5] = "abcd";
比如在分配内存的时候, 还有在其他方面有什么区别
const char *str1 = "abcd";
str1
sizeof
char str2[5] = "abcd";這個語句在棧內存中分配了一塊內存存儲字符數組,然後把該字符數組的首地址賦予str2,標識該數組,用sizeof操作符對其操作時,傳回的則是數組名str2所標識數組的元素個數。
char str2[5] = "abcd";
str2
sizeof(type) sizeof expression
兩個版本都回傳一個size_t類型的常數。 1) 傳回 type 類型對應物件的大小(以位元組為單位)。 2) 傳回 expression 的回傳類型對應物件的大小(以位元組為單位)。
size_t
所以原來的回答有錯誤,現在更正為: sizeof str1回傳的是指標str1的位元組大小,sizeof str2傳回的是str2所標識數組的所有元素的位元組大小。
sizeof str1
sizeof str2
前者的資料只可讀不可寫, 後者的可讀可寫. 原因是資料儲存的位置不同, 可讀寫屬性不同.
const char *str1 = "abcd";
這個語句在記憶體中分配了一塊靜態記憶體儲存字元數組,然後把該字元數組的首位址賦予指針str1
,這裡的str1
是一個指針,用sizeof
操作符對其操作時,傳回的是該指標的大小。char str2[5] = "abcd";
這個語句在棧內存中分配了一塊內存存儲字符數組,然後把該字符數組的首地址賦予str2
,標識該數組,用sizeof
操作符對其操作時,傳回的則是數組名str2
所標識數組的元素個數。Update: 更正
兩個版本都回傳一個
size_t
類型的常數。1) 傳回 type 類型對應物件的大小(以位元組為單位)。
2) 傳回 expression 的回傳類型對應物件的大小(以位元組為單位)。
所以原來的回答有錯誤,現在更正為:
sizeof str1
回傳的是指標str1
的位元組大小,sizeof str2
傳回的是str2
所標識數組的所有元素的位元組大小。前者的資料只可讀不可寫, 後者的可讀可寫. 原因是資料儲存的位置不同, 可讀寫屬性不同.