これは、この質問に関連しています:関数にメモリを割り当てるためにポインターへのポインターが必要な理由
質問への答えは、なぜこれがうまくいかないのかを説明しました:
void three(int * p)
{
p = (int *) malloc(sizeof(int));
*p=3;
}
void main()
{
int *p = 0;
three(p);
printf("%d",*p);
}
...しかし、これは機能します:
void three(int ** p)
{
*p = (int *) malloc(sizeof(int));
**p=3;
}
void main()
{
int *p = 0;
three(&p);
printf("%d",*p);
}
私の質問は、関数からポインターを返すことで、これも機能するということです。何故ですか?
int* three(int * p)
{
p = (int *) malloc(sizeof(int));
*p=3;
return p;
}
void main()
{
int *p = 0;
p=three(p);
printf("%d",*p);
}