这两个语句是啥意思 char (*test)[10];测试=新字符[4][10];
Posted
技术标签:
【中文标题】这两个语句是啥意思 char (*test)[10];测试=新字符[4][10];【英文标题】:What is the meaning of these two statements char (*test)[10]; test = new char[4][10];这两个语句是什么意思 char (*test)[10];测试=新字符[4][10]; 【发布时间】:2021-11-19 02:01:25 【问题描述】:在 C++ 中
char (*test)[10];
test = new char[4][10];
以上两个声明是什么意思?
【问题讨论】:
相关:***.com/q/13910749/12416453 这能回答你的问题吗? Difference between *ptr[10] and (*ptr)[10] 【参考方案1】:char (*test)[10];
第一行将test
声明为指向char[10]
的指针。
test = new char[4][10];
第二行创建一个char[4][10]
,一个包含4个char[10]
类型元素的数组,并将指向该数组第一个元素的指针分配给test
。
类似
T* test; // pointer to T
test = new T[4]; // create array with 4 elements
// and assign pointer to first element to test
【讨论】:
谢谢你的回答new char[4][10]
是否合法?我从未见过在不使用 typedef 的情况下分配 1 new
的二维数组。
@RemyLebeau 确实看起来有点奇怪,但我认为这很好。 using foo = char[10]; test = new (foo[4]);
看起来不那么奇怪,但与别名一样【参考方案2】:
当您有一个数组然后在表达式中使用时(极少数例外),它将转换为指向其第一个元素的指针。
例如,如果您有以下数组声明
char arr[4][10];
然后将其转换为表达式,例如用作初始化表达式,以指向其第一个 char ( * )[10]
类型元素的指针。
所以你可以写例如
char (*test)[10] = arr;
为数组分配内存的操作符 new 还返回一个指向已分配数组第一个元素的指针。所以如果你想分配一个 char[4][10] 类型的数组,那么你可以写
char (*test)[10] = new char[4][10];
这里char[10]
是分配数组的元素类型。所以指向数组元素的指针的类型为char ( * )[10]
。
【讨论】:
以上是关于这两个语句是啥意思 char (*test)[10];测试=新字符[4][10];的主要内容,如果未能解决你的问题,请参考以下文章
C语言中 char num[15][2]是啥意思? 15 和2分别代表啥意思?