二维指针

Two-dimensional array of pointers

本文关键字:二维 指针      更新时间:2023-10-16

我想编写一个将指针返回二维指针数组的函数。我有这个数组: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];

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

指向您的数组的指针具有Organism* (*)[20][20]类型。

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

(作为奖励, worldTab[20]超出了范围,因为它将是存在的二十个二十个数组。而且,在分配给*temp之前,您从未初始化temp,这是违规访问的来源。(

虽然您可以写

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

或简单

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

我认为您应该学会使用std::vectorstd::array - 它们缓解了很多痛苦。
(另外,是2017年。虽然很有趣,但没有必要像1969年那样编程。(