在代碼里,經常會用字符串進行初始化操作。如:
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指向的內存中的值是不可修改的(靜態常量區)。