在C++中,C数组在语法上有点难以理解,并且可能需要一些时间来习惯.虽然1D数组衰减到指针:
void fn1(int x[2]) {}
void fn2(int*x) {}
Run Code Online (Sandbox Code Playgroud)
fn1()并fn2()具有相同的功能签名.
数组实际上有一个类型,包括数组中有多少个元素.如:
void fn(int (&)[2]) {}
Run Code Online (Sandbox Code Playgroud)
fn() 只接受2元素的int数组.
事实是,我只能看到固定数量的元素的数组只能由具有该签名的堆栈,文件范围或结构/类分配生成:
int twoElementArray[2];
Run Code Online (Sandbox Code Playgroud)
如果我要在堆上动态分配它,我似乎无法获得相同的签名.我以为我可能会施展它,但没有成功:
int (&array)[2] = reinterpret_cast<int(&)[2]>(new int[2]); // FAIL!
Run Code Online (Sandbox Code Playgroud)
有关如何实现这一点的任何想法吗?
编辑:虽然我选择了一个答案,但它实际上并没有投出任何东西,但是使用了一种绝对更好的方法然后再进行投射(如果不需要IMO,最好不要施放).但是,它在技术上没有回答这个问题,因为问题是否有"一种指向数组类型的指针?" 答案是肯定的.
int (&array)[2] = *reinterpret_cast<int(*)[2]>(new int[2]); // SUCCESS!
Run Code Online (Sandbox Code Playgroud)
请注意,我不一定建议这样做,但它确实回答了这个问题.如果我需要将指针转换为数组类型,那将是如何做到的.阅读所选答案以获得更好的解决方案operator new[].
如果我理解你的问题,你会想做这样的事情:
// allocate an array of one int[2] dynamically
// and store a pointer to it
int(*p)[2] = new int[1][2];
// now initialize a reference to it
int(&array)[2] = *p;
// delete the array once you no longer need it
delete[] p;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6711 次 |
| 最近记录: |