二维指针数组

时间:2017-04-21 18:09:43

标签: c++

我想编写一个返回指向二维数组指针的函数。我有这个数组:Organism* worldTab[20][20];我的朋友建议以这种方式编写我想要的函数:

    Organism** getWorldTab() {
    return worldTab[20];
}

这是对的吗?当我想这样做时(tempOrganism*** temp;):

    *temp = world.getWorldTab();

Visual Studio抛出异常

    Exception thrown: write access violation.

    this->temp was 0xCCCCCCCC.

我很确定getWorldTab()函数是个问题。

worldTab定义:Organism* worldTab[20][20];

1 个答案:

答案 0 :(得分:1)

数组不是指针,尽管在某些情况下它可以转换为指向其第一个元素的指针,而指向数组的指针与指针指针完全不同。

指向数组的指针的类型为Organism* (*)[20][20]

指向数组第一个元素的指针可能是你朋友的想法,但它的类型为Organism* (*)[20],而不是Organism**Organism***,并且可以'转换为任何一个。

(并且,作为奖励,worldTab[20]超出范围,因为它将是20个存在的第21个数组。并且在分配给{{1}之前,您从未初始化temp },这是访问冲突的来源。)

虽然你可以写

*temp

或只是

Organism* (*getWorldTab())[20] {
    return &worldTab[0];
}

Organism* (*temp)[20] = getWorldTab();

我认为你应该学会使用Organism* (*temp)[20] = worldTab; std::vector - 它们会减轻很多痛苦。
(另外,它是2017年。虽然它很有趣,但它不需要像1969年那样编程。)