字符串初始化方式與區別


在代碼里,經常會用字符串進行初始化操作。如:

char str1[] = "hello"; //字符串數組
char *str2 = "hello";  //字符指針

 

對於上面2條初始化語句,它們的區別是什么?

1 "hello"是一個字符串常量,存放在靜態常量區

2 str1是一個字符數組,分配在棧上,存儲空間由"hello"的長度決定(含'\0'),存放的內容由"hello"進行初始化。

  也就是編譯器會把靜態常量區的"hello"拷貝到棧上的str1數組區域,對數組進行初始化

3 str2是一個字符指針,指向了靜態常量區的"hello"的首地址

4 計算長度的區別:

  ①strlen(str1) = strlen(str2)

  ②sizeof(str1) = 12;

  ③sizeof(str2) = 4(x86平台) ,8(x64平台)

5 讀寫區別

  str1內存中的值是可以修改的

  str2指向的內存中的值是不可修改的(靜態常量區)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM