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

时间:2015-10-01 05:34:39

标签: c++ pointers

为什么我无法使用以下内容初始化char** c

 c = new (char*)[10];

,while:

 c = new char*[10];

好吗?

3 个答案:

答案 0 :(得分:4)

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

new (optional_parameters) ( type ) optional_initializer

new (optional_parameters) type optional_initializer

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

您的其他尝试确实符合第二种格式typechar*[10]且两个可选部分都缺失。

答案 1 :(得分:1)

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

new (char*)[10]

不是语法上有效的表达式。由于这不是语法上有效的表达式,因此使用

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

答案 2 :(得分:0)

用于new表达式的类型与变量声明的工作方式类似,但删除了变量名称。要声明一个包含10个字符指针的数组,请使用

char *p[10];

(char *) p[10];

同样,要动态分配10个字符指针的数组,请使用

new char *[10]

new (char *)[10]