c++ - C语言中, 如下两种定义字符串的方式有什么不同?
巴扎黑
巴扎黑 2017-04-17 11:24:54
0
2
555
char* str = "abcd";

char str[5] = "abcd";

比如在分配内存的时候, 还有在其他方面有什么区别

巴扎黑
巴扎黑

全部回覆(2)
Ty80
  • const char *str1 = "abcd";這個語句在記憶體中分配了一塊靜態記憶體儲存字元數組,然後把該字元數組的首位址賦予指針str1,這裡的str1是一個指針,用sizeof操作符對其操作時,傳回的是該指標的大小。
  • char str2[5] = "abcd";這個語句在棧內存中分配了一塊內存存儲字符數組,然後把該字符數組的首地址賦予str2,標識該數組,用sizeof操作符對其操作時,傳回的則是數組名str2所標識數組的元素個數。

    Update: 更正

sizeof(type)        
sizeof expression   

兩個版本都回傳一個size_t類型的常數。
1) 傳回 type 類型對應物件的大小(以位元組為單位)。
2) 傳回 expression 的回傳類型對應物件的大小(以位元組為單位)。

所以原來的回答有錯誤,現在更正為: sizeof str1回傳的是指標str1的位元組大小,sizeof str2傳回的是str2所標識數組的所有元素的位元組大小。

大家讲道理

前者的資料只可讀不可寫, 後者的可讀可寫. 原因是資料儲存的位置不同, 可讀寫屬性不同.

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板