如何初始化指向指针数组的指针?

How do I initialize a pointer to an array of pointers?

本文关键字:指针 数组 初始化      更新时间:2023-10-16

我正在尝试初始化指向指针数组的指针。 下面是一个示例:

class MyClass { };
// INTENT: define a pointer to an array of pointers to MyClass objects
MyClass* (*myPointer)[];
int main(void) {
// INTENT: define and initialize an array of pointers to MyClass objects
MyClass * tempArray [] = {
new MyClass(),
new MyClass()
};
// INTENT: make myPointer point to the array just created
myPointer = tempArray;
}

当我编译它时,我得到:

./test2.cpp: In function ‘int main()’:
./test2.cpp:15:19: error: cannot convert ‘MyClass* [2]’ to ‘MyClass* (*)[]’ in assignment
myPointer = tempArray;
^~~~~~~~~

首先,数组不是指针。您必须使用以下地址:

myPointer = &tempArray;

接下来,当你写

T foo[] = { t1, t2 };

这只是

T foo[2] = { t1, t2 };

使用正确的类型(实时示例(:

MyClass* (*myPointer)[2];

或者最好首先使用std::array<MyClass>。忘记原始拥有指针。请改用智能指针。

// INTENT: define a pointer to an array of pointers to MyClass objects
MyClass* (*myPointer)[];

不能在声明中监视数组的大小。你需要这个:

MyClass* (*myPointer)[2];

然后

MyClass * tempArray [] = {
new MyClass(),
new MyClass()
};
// INTENT: make myPointer point to the array just created 
myPointer = &tempArray;

数组衰减为指向第一个元素的指针。由于元素类型也是一个指针,因此您可以声明一个双指针变量并使其指向该元素,例如:

class MyClass { };
MyClass** myPointer;
int main(void) {
MyClass * tempArray [] = {
new MyClass(),
new MyClass()
};
myPointer = tempArray;
// same as:
// myPointer = &tempArray[0];
...
}