2015-04-23 4 views
1

Мне нужно создать эту функцию:Двойной указатель на функцию

void lpLoadFileFunc(int (*loadFile)(char *filename, FILE **file)) 

Чтобы сделать это, я должен сначала создать эту функцию:

int loadFile (char *filename, FILE **file)) 

Эта функция должна загрузить файл и вернуться, если нагрузка была успешный.

Но я не понимаю, зачем использовать двойной указатель.

Вы можете помочь?

+1

Зависит от выполнения функции. – nikaltipar

+0

Значит, вы имеете в виду «почему используется ФАЙЛ **»? – farfareast

+0

Конечно 'loadFile()' присваивает '* файл'. – chux

ответ

1

C - это пропуск по значению. Когда вы передаете переменную функции, она копируется и изменение этой копии не изменяет исходную переменную. Однако вы можете передать адрес переменной, функция получит указатель на эту переменную, что позволит вам изменить ее. Не забывайте, что указатель по-прежнему является переменной, и если вы хотите изменить указатель, вам нужен двойной указатель.

void Test(int value , int* pointer) 
{ 
    value = 1 ; 
    *pointer = 1 ; 
} 

int one = 0 ; 
int two = 0 ; 

Test(one , &two) ; 

printf("%d %d\n" , one , two) ; 

Как вы можете видеть, one не изменилось.

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