const char *pt1="123";
const char *pt2={'1', '2', '3', '\0'};
是一样的吗?后者编译失败。
error: scalar object ‘pt2’ requires one element in initializer
为什么? "123"
和 {'1', '2', '3', '\0'}
不一样吗?
我可以使用delete[] pt1
来释放资源还是只是delete pt1
?
最佳答案
不,它们不一样。第一个是字符串文字,第二个是包含 char
类型元素的初始化列表。
你可以像这样使用第二种语法:
const char pt2[]={'1', '2', '3', '\0'};
但即使在这种情况下,它们也不同:
const char *pt1="123";
在这种情况下,"123"
将存储在只读存储器中。 pt1
只是指向它。
const char pt2[]={'1', '2', '3', '\0'};
但在此所有元素将被复制到 pt2。
can use delete [] pt1 to release resource or just delete pt?
不,你不能
(实际上,这是可能的,但你不应该这样做)
关于c++ - 为什么 const char *pt2= {'1' , '2' , '3' , '\0' };无法编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16808015/