你能把指针投射到数组中吗?

时间:2017-04-06 13:05:01

标签: c++ c++11

我有一个指针“a”,它是A *类型。我现在在该地址有n个类型为A的对象,我想迭代它们。

我想把它转换为A [n],这样我就可以使用c ++ 11 range-for和write for (auto temp : a){...}。 当然,我可以使用经典for(int i=0; i<n; i++) {temp=a[i]; ...},但范围更清晰。

2 个答案:

答案 0 :(得分:5)

是的,你可以做。

// 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;

答案 1 :(得分:1)

合理的代码中,我回避它。但是C ++允许你犯下纯粹的恶魔行为。在这方面,我提供了一个解决方案:

以牺牲一些相当大的混淆为代价,您可以编写一些预备模板:

namespace std
{
    template <typename T> T* begin(std::pair<T*, T*> const& a)
    {
        return a.first;
    }

    template <typename T> T* end(std::pair<T*, T*> const& a)
    {
        return a.second;
    }
}

然后你可以写点像

for (auto&& i : std::make_pair(a, a + n)){

}

模板内容带来beginend的合适定义,这是for范围循环所必需的。