私たちはCで持つことができるのポインタへのポインタの数に制限は何ですか?

pasignature:

Cでは、私たちは、ポインタでこれを行うことができます知っています:

int *p;          /* an int pointer (ptr to an int) */
int **pp;        /* a pointer to an int pointer (ptr to a ptr to an int) */

そして、さえ:

int **app[];            /* an array of pointers to int pointers */
int (**ppa)[];          /* a pointer to a pointer to an array of ints */
int (**ppf)();          /* a pointer to a pointer to a function returning an int */
int *(*pap)[];          /* a pointer to an array of int pointers */
int **fpp();            /* a function returning a pointer to an int pointer */

しかし、我々は無限に3つのポインタのような何かを行うことができますか?例えば:

int ***ppp;             /* a pointer to a pointer to an int pointer */
int ****pppp;           /* a pointer to a pointer to a pointer to an int pointer */

...そしてその無限大までに。

私たちが持つことができ、ポインタへのポインタの番号に任意の上限はありますか?その場合、上限は何ですか?

クラッタ:

標準では、任意の上限を課していません。それは何と言うんは、コンパイラがサポートする必要があるということである、少なくとも 12。

実用的なコードでは、無限と見なすことができます。あなたがプログラムを書く場合にのみ、それには、人間が今までこれが関連する可能性が読んではならないというプログラムを書き込みます。ほとんどのプログラマーは、あなたが警告として3つ星を取るべきであると言うでしょう。本当に正当な理由なしに2を超えて行ってはいけません。

私はgccの上で10000で試してみました、それが働きました。100000一つ興味深いのは、それがコンパイルに非常に長い時間がかかることであると私は今しようとしています。これは、コンパイルするのに数分を要し、かつ唯一のステートメントが10000星を持つポインタの宣言でした。

コードはCファイルを生成します。

// gen.c
#include <stdio.h>

int main()
{
    const size_t n = 10000;
    printf("int main(){int ");
    for(size_t i=0; i<n; i++)
        printf("*");
    printf("p;}\n");
}

実行します。

$ gcc gen.c -c gen
$ ./gen > stars.c
$ gcc stars.c

コメントへの回答:

これは楽しい実験でしたが、私はこれをさらに調査をしません。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=383770&siteId=1