为什么我不能用c = new (char*)[10]初始化char** c,而c = new char*[10]是可以的

why cannot I initialize char** c with c = new (char*)[10], while c = new char*[10] is ok?

本文关键字:char new 不能 为什么 初始化      更新时间:2023-10-16

为什么不能初始化char** c

 c = new (char*)[10];

,:

 c = new char*[10];

是好吗?

这有点奇怪。new-statement有两种格式,

new (optional_parameters) ( type ) optional_initializer

new (optional_parameters) type optional_initializer

您对new (char*)[10]的尝试不适合第一种形式,即使(char*)看起来像(type),因为[10]不是有效的初始化式。

你的另一个尝试符合第二种形式,typechar*[10],两个可选部分都缺失。

由于超出本回答范围的原因,该语言的设计者决定:

new (char*)[10]

不是语法上有效的表达式。因为这不是一个语法上有效的表达式,所以用

初始化char** c没有意义。
c = new (char*)[10];

new表达式使用的类型与变量声明的工作原理类似,但是去掉了变量名。要声明一个包含10个字符指针的数组,可以使用

char *p[10];

(char *) p[10];
同样,要动态分配包含10个字符指针的数组,可以使用
new char *[10]

new (char *)[10]