はじめての C

ポインタ 3

ポインタとして 返すことで (関数の) 返り値を 効率よく 改良することが でき、変数は、関数の 外側で 交換することが 可能になります。

ただし、それを 考慮に入れようとすれば、そこには 1つ 大きな 落し穴が 待ち受けています。

ローカル変数は、ブロックが 閉じた時点で こわされて、そのメモリを 回収されてしまいます。

そのため、ローカル変数を ポインタにして 返すということは、危険が いっぱいなのです。

int *f(void)
{
int i = 10;
return *i; /* No! Returning a local variable is bad! */
}

その場合でも、制御 - control - することで (例えば、malloc や その family によって 返されるような) メモリとして 返せば、OK に なります。

int *f(void)
{
int *i = malloc(sizeof(int));
return i; /* Okay, you control when the memory is released */
}