2

次のプログラムは、ポインターを宣言してから、前のポインター変数のアドレスを保持する新しいポインターを宣言します。ネストされたポインター変数を使用してメモリアドレスを保持するには、どのくらいの制限がありますか?

#include <stdio.h>
#include <conio.h>

void main()
{
    int x=2,y=5;

    int *ptr;
    int **sptr;
    int ***ssptr;

    ptr = &x; // address of x
    *ptr = 0; 
    sptr = &ptr;
    ssptr = & sptr;

printf(" address is ip = %u %u %u",ptr,sptr,ssptr);
    _getch();
}
4

6 に答える 6

1

制限はありません。ポインターは、内容がアドレスであるメモリーのチャンク (通常は 1 ワード) です。ポインターへのポインターも、その内容がアドレスであるワードですが、たまたまそのアドレスの内容別のアドレスである場合があります。ポインターへのポインターについて特に特別なことは何もありません(ポインターへのポインターへのポインター...など、うんざりです)。

于 2011-02-10T17:59:23.660 に答える
1

制限はありません。自分自身を指すポインターを作成することもできます。これは無限に再帰的です。

void *p = &p;
于 2011-02-10T22:28:45.977 に答える
0

制限を示唆する唯一の言語は次のとおりです。

5.2.4.1 変換の制限

1 実装は、次の制限のすべてのインスタンスを少なくとも 1 つ含む少なくとも 1 つのプログラムを変換および実行できなければならない: 13)
...
— 12 個のポインター、配列、および関数宣言子 (任意の組み合わせ) 宣言内の算術、構造、共用体、または不完全な型の変更
...
— 論理ソース行の 4095 文字
...
于 2011-02-10T20:04:16.770 に答える
0

言語自体に制限はありません。ポインター変数の目的は、アドレスを格納することです。アドレスを指すポインタ、アドレスを指すポインタ、...、アドレスを指すポインタを格納することができます。

ただし、これらのタイプのネストされたポインターを使用すればするほど、コードが理解しにくくなります。

于 2011-02-10T17:59:13.443 に答える
0

いいえ、それらはすべて何かへの単なるポインターであり、それらが指すものはたまたま別のポインターであるため、制限はありません。何か実用的なことをしようとしていますか?トッド。

于 2011-02-10T18:01:12.073 に答える
0

私の知る限り、(理論上) システム メモリの制限以外に制限はありません。ただし、これは使用するコンパイラによって異なります。

于 2011-02-10T17:57:48.523 に答える