gpt4 book ai didi

c++ - 有没有办法将指针转换为数组类型?

转载 作者:IT老高 更新时间:2023-10-28 23:01:21 36 4
gpt4 key购买 nike

C 数组在 C++ 中的语法上有些难以理解,可能需要一些时间来适应。虽然一维数组衰减为指针:

void fn1(int x[2]) {}
void fn2(int*x) {}

fn1()fn2() 具有相同的函数签名。

数组实际上有一个类型,它包含数组中有多少元素。如:

void fn(int (&)[2]) {}

fn() 将只接受 2 元素 int 数组。

问题是,我只能看到固定数量元素的数组只能通过堆栈、文件范围或具有该签名的结构/类分配来生成:

int twoElementArray[2];

如果我要在堆上动态分配它,我似乎无法获得相同的签名。我以为我可以施放它,但没有成功:

int (&array)[2] = reinterpret_cast<int(&)[2]>(new int[2]); // FAIL!

关于如何实现这一点的任何想法?

 


编辑:虽然我选择了一个答案,但它实际上并没有转换任何东西,而是使用了一种绝对比转换更好的方法(如果不需要 IMO,最好不要转换)。但是,从技术上讲,它并没有回答这个问题,因为问题询问是否有“一种将指针转换为数组类型的方法?”答案是肯定的。

int (&array)[2] = *reinterpret_cast<int(*)[2]>(new int[2]); // SUCCESS!

请注意,我不一定建议这样做,但它确实回答了这个问题。如果我需要将指针转换为数组类型,那将是如何做到的。使用 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;

关于c++ - 有没有办法将指针转换为数组类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17258749/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com