一般来说,很多人会觉得这两个定义效果一样,其实差别很大。
以下是个人的一些看法,有不正确的地方望指正。
char* s = “abcd”; 本质上是定义了一个char型指针,它存储在字符常量区;
char s[] = “abcd”; 本质上是一个char型数组,存储在栈空间里,它实际上相当于
char s[] = {‘a’,‘b’,‘c’,‘d’,’\0’};
因此,这三者的sizeof(s):
char* s = "abcd";// sizeof(s) = 8
char s[] = "abcd"; // sizeof(s) = 5
char s[] = {'a','b','c','d'};// sizeof(s) = 4
测试:
char* ss = "this is char*";
char ss1[] = "this is char[]";
std::cout << "sizeof char*: " << sizeof(ss) << std::endl;
std::cout << "sizeof char[]: " << sizeof(ss1) << std::endl;
结果:
说明:
对于char* ss = “this is char*”; ss表示地址,在64位系统中,地址有8个字节;
对于char ss1[] = “this is char[]”; ss1是数组首地址,sizeof(ss1)表示数组大小,
ss1末尾自动添加’\0’,因此是15个字节。