计划1:
void function(char arr[])
{
arr[0] = 'X';
printf("%s",arr);
}
int main()
{
function("MyString");
}
输出:分段错误
计划2:
int main()
{
char arr[] = "MyString";
arr[0] = 'X';
printf("%s",arr);
}
输出:XyString
程序1和程序2有什么区别?在prog1中,字符串值(不是通过引用)传递给数组,因此它应该复制到数组并允许修改它?但它正在抛出细分错误。在prog2中成功允许更改arr []。为什么在prog1中它不起作用?
答案 0 :(得分:2)
const char*
发送给该函数。您无法更改const
对象。来自你的评论:
在prog1中,字符串值(不是引用)也传递给数组,因此应该复制到数组并允许修改它吗?
<强>错误即可。在程序1中,字符串文字放在内存中的某个位置(可能在只读内存中,因为它是常量),然后发送指向该内存位置的const char*
。 字符数组不作为参数发送,只发送第一个字符的地址。