我想编写一个返回指向二维数组指针的函数。我有这个数组:Organism* worldTab[20][20];
我的朋友建议以这种方式编写我想要的函数:
Organism** getWorldTab() {
return worldTab[20];
}
这是对的吗?当我想这样做时(temp
是Organism*** temp;
):
*temp = world.getWorldTab();
Visual Studio抛出异常
Exception thrown: write access violation.
this->temp was 0xCCCCCCCC.
我很确定getWorldTab()
函数是个问题。
worldTab定义:Organism* worldTab[20][20];
答案 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年那样编程。)