为什么我不能用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** 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]
不是有效的初始化式。
你的另一个尝试符合第二种形式,type
是char*[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]
相关文章:
- 为char数组调整zlib-zpipe
- char array[sizeof(Message)]; vs char* array = new char[sizeo
- 正在使用new char[]或malloc的结果来铸造float*是UB(严格的混叠冲突)
- 正确的语法以对 char* 数组使用 new
- "char *"和"char * = new char[]"之间的C++区别
- 分配给“char* x = new char[32]”的内存过多
- Heap corruption after new char[strlen
- 可能的内存泄漏:new char[strlen()]
- 如何在char*func()中正确删除用new[]分配的char数组
- 在动态分配中,在关键字new之前使用Why(unsigned char*)
- 为什么我不能用c = new (char*)[10]初始化char** c,而c = new char*[10]是可以的
- C++ delete[] on new char;
- 将字符串存储为char[],位置为new,并将其取回
- 操作符new(n)与new unsigned char[n]的位置new
- shared_ptr<void> t(new char[num]) 表示内存泄漏?
- New和delete char*会导致异常
- 当重载new操作符时,它不会为char指针分配内存
- "new char[]"是否需要手动释放资源?
- 当每个字符串由"new char[]"创建时,如何对"vector<string>"的元素调用"delete"?
- 为什么 ptrVec = new vector<const char*> 编译失败