将指针数组传递给函数

时间:2014-08-30 09:43:55

标签: c arrays function pointers

我有以下部分代码:

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*);

但我上面的函数调用不起作用,因为第二个参数的类型错误,我不明白为什么。

2 个答案:

答案 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];
}