我希望
c1
)*cp1
)的指针数组,可以对其进行排序但是我在初始函数调用时遇到了问题。
这是我的基本代码:
struct Car
{
int speed;
};
Car c1[5];
Car *cp1[5];
int main() {
for (int i=0;i<5;i++) {
c1[i].speed = i;
cp1[i] = &c1[i];
}
garage(cp1, 5);
}
void garage(Car **ar, int n) {
int p = (*ar[n / 2])->speed;
}
答案 0 :(得分:2)
首先,编译器在您调用它的位置不知道您的garage
函数,因为它在main
下面定义。要修复它,要么将函数定义放在main上面,要么用原型引入它。
其次,在int p = (*ar[n / 2])->speed;
行,*ar[n/2]
不是指针,因此您应该使用.
代替->
,如int p = (*ar[n / 2]).speed;
答案 1 :(得分:1)
struct Car
{
int speed;
};
Car c1[5];
Car *cp1[5];
void garage(Car **ar, int n); // forward declare garage
int main()
{
for (int i=0;i<5;i++) {
c1[i].speed = i;
cp1[i] = &c1[i];
}
garage(cp1, 5);
}
void garage(Car **ar, int n) {
int p = ar[n / 2]->speed; // -> dereferences the pointer, you don't need to
}
答案 2 :(得分:1)
必须先声明Funcion车库,然后才能推荐它。
void garage(Car **ar, int n);
int main()
{
//...
}
void garage(Car **ar, int n) {
//...
}
C ++中的函数main应具有返回类型int
int main()
{
//...
}
在函数中,正确的表达式看起来是
void garage(Car **ar, int n) {
int p = (*ar )[n / 2]).speed;
}
或者
void garage(Car **ar, int n) {
int p = ar[n / 2]->speed;
}
或者
void garage(Car **ar, int n) {
int p = ( *ar[n / 2] ).speed;
}