我有一个测试函数,它将数组作为参数。我有一系列指针。有人可以解释为什么我传递它时需要将指针指向一个指针数组吗?
void test(States a[]){
cout << a[0].name << endl;
cout << a[1].name << endl;
}
致电test()
:
States *pStates[MAX_STATES];
test(*pStates); //Or test(pStates[0])
//Can't do test(pStates);
答案 0 :(得分:0)
如果测试函数的参数期望如此
,则不需要取消引用void test(States *a[]);
但是在你的情况下,显然参数类型是States []
,所以你需要传递一个指针。
您可能需要考虑将测试功能重写为:
void test(States *a[]){
cout << a[0]->name << endl;
cout << a[1]->name << endl;
}
答案 1 :(得分:0)
请改用:
void test(States* a[]){
cout << a[0]->name << endl;
cout << a[1]->name << endl;
}
你不需要取消引用它......
答案 2 :(得分:0)
pStates
的声明声明了一系列指针。不是指向数组的指针。
但是函数void test(States a[]);
需要一个对象数组(States
个对象)。
你不能只把一个投射到另一个。
#include <iostream>
typedef struct {
int name;
} States; //Surely this should be called State (not plural)
const size_t MAX_STATES=2;
void test(States a[]){
std::cout << a[0].name << std::endl;
std::cout << a[1].name << std::endl;
}
int main() {
States lFirst;
States lSecond;
lFirst.name=1;
lSecond.name=7;
//Here's what you had.
States*pStates[MAX_STATES];
//Now initialise it to point to some valid objects.
pStates[0]=&lFirst;
pStates[1]=&lSecond;
//Here's what you need to do.
States lTempStates[]={*pStates[0],*pStates[1]};
test(lTempStates);
return EXIT_SUCCESS;
}