搜尋

首頁  >  問答  >  主體

c++ - C语言中, 如下两种定义字符串的方式有什么不同?

char* str = "abcd";

char str[5] = "abcd";

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

巴扎黑巴扎黑2809 天前580

全部回覆(2)我來回復

  • PHP中文网

    PHP中文网2017-04-17 11:26:54

    • 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所標識數組的所有元素的位元組大小。

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 11:26:54

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

    回覆
    0
  • 取消回覆