1
32
使用初始化值定义的字符指针进入只读段。要使它们可修改,您需要在堆上创建它们(例如,使用new/malloc)或将它们定义为数组。 不可修改:
可修改:
|
2
16
This answer 很好,但不太完整。
字符串文字
引用类型为的匿名数组对象
上面的声明创建了类型为的匿名对象
注意,在C++中,字符串文字实际上是
因此,如果您试图通过修改数组,编译器将发出警告
调用者将收到指向不再存在的内容的指针。如果需要引用作用域之外的数组
因此,在调用之前,数组将继续存在
请仔细注意
|
3
4
字符串文字可能不可修改;最好假设他们不是。看见 here 更多细节。 |
4
4
您应该养成将变量类型与初始化器类型匹配的习惯。在这种情况下:
这样,您将得到一个编译器错误,而不是运行时错误。将编译器警告级别调到最大也有助于避免此类陷阱。为什么这在C语言中不是一个错误可能是历史的;早期的编译器允许它,而不允许它可能会在语言标准化时破坏太多现有代码。然而,现在操作系统不允许这样做,所以这是学术性的。 |
5
0
是的,你真的应该测试一下
|