在内存分配方面,这两者有什么区别.
char *p1 = "hello";
char p2[] = "hello";
Run Code Online (Sandbox Code Playgroud)
Nik*_*sov 39
第一个创建一个指针变量(存储器的四个或八个字节,具体取决于平台)并在那里存储一个字符串文字的位置,第二个创建一个包含六个字符的数组(包括零字符串终结符字节)并在那里复制文字.
您应该在第一行获得编译器警告,因为文字是const
.
第一个是指向const(只读)数据的非const指针,第二个是非const数组.
由于第一个是指向const(只读)数据的非const指针,第二个是非const数组,正如Paul所说,你可以写:
p2[2]='A'; //changing third character - okay
Run Code Online (Sandbox Code Playgroud)
但你不能写:
p1[2]='A';//changing third character - runtime error!
Run Code Online (Sandbox Code Playgroud)