2014-08-30 4 views
-4

я следующая часть кода:передавая массив указателей на функции

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

Я думаю, вам нужно предоставить остальную часть кода, который вы не предоставили ничего о 'com' или' score' – TerryG

+0

Я не понимаю, как вызов функции вызывает цикл. – littlerunaway

+0

Почему вы присваиваете 'res + i - 1'' resP's? Первым назначением будет «res-1», который выходит за рамки. Остальная часть кода кажется мне верной. – ThoAppelsin

ответ

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]; 
} 
+0

на самом деле, 'int i;' then 'for (i = 0; i <10; i ++)' i всегда говорили «не объявляйте' int' внутри цикла » – TerryG

+4

почему нет? Мне сказали обратное – littlerunaway

+0

Я пробовал, такая же проблема – littlerunaway

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] недействителен.

Я не вижу связи между «мой вызов функции выше не работает» и «второй параметр неправильного типа». Вы не сказали, что вы подразумеваете под «мой вызов функции выше не работает».

+0

Я думаю, что ты прав. OP не показывал точной ошибки, которую он получает. –

+0

@ Do not You Worry Child Я могу использовать только информацию, которую он предоставил. :) –

+0

Было бы лучше, если бы был прототип отдельно от определения и без имен параметров, как в OP, так что это было бы 1: 1, но это работает достаточно хорошо. – ThoAppelsin

Смежные вопросы