char *p = "123"; p可以理解成一個const char* ,"123"是在overlap數據段中,內容不能修改
char p[] = "123"; p是一個char*, 一般被編譯器放置在普通的數據段中
char *p = "123"; 初始化指針,p 的初始值由存放"123"的首地址決定,p可以理解成一個const char*
char p[] = "123"; 初始化指針與數據內容,p的值是分配的,相當於先char p[]; 然後strcpy(p,"123");
#include <cstring>
#include <iostream>
int main()
{
char *p1 = "abcdef";
char p2[] = "abcdef";
std::cout << sizeof(p1)/sizeof(char) <<std::endl;
std::cout << sizeof(p2)/sizeof(char) <<std::endl;
//*p1 = 'g'; //運行時出錯,因為是“const char *”,內容不可變
++p1; //指針本身可變
std::cout << p1[0] << std::endl;
std::cout << p1 <<std::endl;
return 0;
}
運行結果:
4 //p是指針
7 //p是數組,別忘了末尾自動加的 '\0'
b //const char * 指針可變,內容不可變
bcdef