Объявление типа указателя в параметре функции для изменения связанного списка - PullRequest
0 голосов
/ 24 января 2019

Я знаю, что для записи функции в параметр нам нужно передать указатель на этот параметр. Это также тот случай, если мы хотим изменить связанный список. Я пытаюсь понять, почему нам нужно объявить тип указателя P *, а не просто обычный тип, чтобы изменить связанный список?

Каковы основные различия между двумя примерами?

int function(struct list_t** list){

}
int function(struct list_t* list){

}

Могу сказать, что в обоих примерах я передаю указатель на параметр, что технически позволяет мне редактировать связанный список.

1 Ответ

0 голосов
/ 24 января 2019

С struct list_t* list, тогда list является указателем на list_t.

С struct list_t** list, тогда list является указателем на указатель на list_t.

Если у вас есть, например,

list_t* my_list;

затем my_list - указатель на list_t. Если затем вы используете адрес оператора &, чтобы получить указатель на my_list (как в &my_list), то вы получите указатель на указатель на list_t, то есть list_t**.


Использование указателей на указатели заключается в эмуляции передачи по ссылке в C, которая имеет только передачу по значению. Как вы говорите, если у вас есть указатель на указатель, то вы можете разыменовать его и заставить указатель куда-то еще. С простым указателем, он передается по значению, а значение копируется в переменную аргумента. Изменение копии не приведет к изменению оригинала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...