c++ - 为什么 const char *pt2= {'1' , '2' , '3' , '\0' };无法编译?

标签 c++ string

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/

相关文章:

c++ - 在 Windows 上的 Qt Creator 中编译 Cuda 代码

c++ - 为什么当 d == 0 时 'd/= d' 不抛出被零除异常?

c# - 获取字符串定义以接受多行?

c++ - std::vector 保留方法无法分配足够的内存

c++ - 有没有办法在 C++ 中同时为多个模板分配一个类型?

c++ - 如何将子项插入到 QTreeWidget 层次结构中?

ios - swift 的字符串类型是否符合集合协议(protocol)?

java - 想要借助正则表达式替换标签中的值属性吗?

python - 确定字符串 B 是否可能是对字符串 A 进行删除/添加的结果

javascript - 从 Javascript 文本框中删除制表符空间