ローカルの静的/グローバル変数へのポインターを返す関数を、C++ と同様に C で左辺値として使用できるかどうか疑問に思っていたので、試してみたところ、これは可能のようです。たとえば、次の単純な関数を考えてみましょう。
int* d(int a){
static int* array = NULL;
static int size = 0;
if(a+1 > size){
size = 2*(a+1);
array = realloc(array, size * sizeof(int));
}
if(a == -1){
free(array);
return NULL;
}
return array + a;
}
これは単純な動的配列です。たとえば*d(30) = 2
、 を実行できますが、コンパイル単位ごとに関数のインスタンスを 1 つしか持てないため、これはあまり役に立ちません。
したがって、C でこの概念の興味深い用途があるかどうかを尋ねたいと思います。実際のアプリケーションもいいでしょう。