есть многократное использование двойных, тройных, ... указателей в 'c'.Экстраполируя ваш пример, двойной указатель можно использовать для присвоения значения указателю, передаваемому функции в качестве параметра.
Итак, если вы возьмете свою функцию bar
, некоторая часть использования вit:
void bar(int **f) {
...
(*f) = temp;
}
int main () {
int *ptr;
bar(&ptr);
}
в вышеприведенном примере функция bar
присвоит значение указателю ptr, который позже может быть использован в main.
Хотя ваша проблема в том, чтов вашем примере вы присваиваете ему указатель, который действителен только внутри функции.Когда функция вернется, ptr
будет присвоено значение, как оно существовало внутри функции, но оно будет указывать на недопустимое значение.Поведение программы на этом этапе не будет определено.
Это поведение можно использовать для возврата указателя на динамически распределенную память или статическую переменную, т. Е.
void bar(int **f) {
int *tmp = (int*)malloc(sizeof(int));
*tmp = 10;
*f = tmp;
}
В этомВ примере tmp будет назначен указатель для динамически выделяемой памяти, который будет сохраняться до тех пор, пока не будет использован free
.Вы можете присвоить значение tmp
для *f
и использовать его позже в main
.Есть также использование для статических или глобальных переменных, которые сохраняются после возврата из функции.