为什么第一个版本会导致程序崩溃,而第二个版本却没有?他们不是一回事吗?
char *shift = "mondo";
shift[3] = shift[2];
Run Code Online (Sandbox Code Playgroud)
char shift[] = {'m', 'o', 'n', 'd', 'o', '\0'};
shift[3] = shift[2];
Run Code Online (Sandbox Code Playgroud)
int main( void )
{
char *shift = "mondo";
shift[3] = shift[2];
char shift[] = {'m', 'o', 'n', 'd', 'o', '\0'};
shift[3] = shift[2];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
没有!这是C中的重要问题之一.首先,您创建一个指向内存只读部分的指针,即您无法更改它,只能读取它.第二个,创建一个字符数组,即连续字符的内存的一部分,您可以同时具有读取和写入访问权限,这意味着您可以读取和更改数组的值.