У меня есть этот код:Двойной Указатели в C и сфера их применения
void alloc2(int** p) {
*p = (int*)malloc(sizeof(int));
**p = 10;
}
void alloc1(int* p) {
p = (int*)malloc(sizeof(int));
*p = 10;
}
int main(){
int *p;
alloc1(p);
//printf("%d ",*p);//value is undefined
alloc2(&p);
printf("%d ",*p);//will print 10
free(p);
return 0;
}
Итак, я понимаю, что alloc1 просто делает локальную копию, так что это не осуществление вне функции указателя, который дается в качестве параметра.
Но что происходит с alloc2?
tl; dr;
И почему этот alloc1(&p);
не будет работать?
Update
Я думаю, что я ответил на мой вопрос. Самое главное, что &
делает вам указатель, а затем a
был создан для двукратного разыменования bei разыменования. Затем двойной указатель указывает на указанный адрес: malloc
. Наконец, адрес был заполнен 10
.
И alloc1(&p);
будет работать, но вы не сможете устранить двойной указатель, так как он принимает один указатель.
Благодаря всем вам
"Двойные указатели" * являются нормальными указателями. Они всего лишь указатели, указывающие на другие указатели. Точно так же, как «единственный указатель» является указателем на то, что не является указателем. – immibis