我有以下部分代码:
int res[10] = {-1, 2,-2,-4,-5,-6, 0, 0, 9,-10};
int* resP[10];
for(int i=0 ; i < 10 ; i++){
resP[i] = res+i;
}
int score;
apply(0, resP, 10, &score);
应用签名看起来像这样(我不允许更改):
void apply(int, int* [], int, int*);
但我上面的函数调用不起作用,因为第二个参数的类型错误,我不明白为什么。
答案 0 :(得分:4)
代码编译成功
#include <stdio.h>
void apply(int _1, int* _2[], int _3, int* _4){}
int main(void)
{
int res[10] = {-1, 2,-2,-4,-5,-6, 0, 0, 9,-10};
int* resP[10];
for( int i = 0 ; i < 10 ; i++ )
{
resP[i] = res+i-1;
}
int score;
apply(0, resP, 10, &score);
}
第二个参数具有合适的类型。所以其他地方的问题。虽然循环中的赋值语句是错误的。您可能无法在数组的第一个元素之前访问内存。那就是指针resP [0]无效。
我没有看到“我上面的函数调用不起作用”和“第二个参数类型错误”之间的关系。你没有说“你的上述函数调用不起作用”是什么意思。
答案 1 :(得分:2)
您的代码编译好我。但还有另一个问题:
for(int i=0 ; i < 10 ; i++){
resP[i] = res+i-1;
}
应该是:
for(int i=0 ; i < 10 ; i++){
resP[i] = res+i;
}
或
for(int i=0 ; i < 10 ; i++){
resP[i] = &res[i];
}