2

値がアドレスに格納されている場合、この宣言は何をしますか

int a = 10;

値を a または &a のアドレスに格納します。そして、値を a のアドレスに格納する場合、次のようにこの変数への間接化を使用できない理由は次のとおりです。

printf("%d", *a);

そうでない場合、各値には一意のアドレスがあり、間接演算子を使用してそれらにアクセスできるとどのように言えますか。

編集:間接参照がポインターでのみ使用されていると思われる場合は、次のことを考慮してください。

int b[10];
b[0] = 4;  // Give it some value

これで、b[0] はスカラー量であり、スカラー値が必要な場所ならどこでも使用できることがわかりました。しかし、この場合、次のように間接化を使用できます。

printf("%d", *b);  // print 4

このスカラー変数でポインターを使用できることは興味深いことではありませんが、配列なしで変数宣言を使用することはできません。

私の意見では、コンパイラは次のように変数宣言の間接化を自動的に生成します。

int a = 4;

したがって、変数が次のように宣言されている場合を除いて、正当ではない別の間接化を設定しているため、これに対して間接化は不可能です。

int a = 4; 
int *b = &a; 
int **c = &b;

編集 2:scanf("%d", &a)値を a ではなく a のアドレスに格納するという証明として取ることができます。

4

5 に答える 5

0

あなたがするとき

int a = 10;

コンパイラは、int. この場所を識別し (これはこの特定の場所、つまり住所)、ラベルを付ける必要があります(この場所は と呼ばれますa)。その後、その時点でデータを保存します。ラベルにより、アクセスが容易になります。ポインターを介してのみ場所にアクセスできるように言語が設計されている場合 (つまり、ポインターを逆参照して値を取得する場合)、それは困難です。

あなたは、正確な緯度と経度によって特定できる土地に住んでいると言えます。ただし、毎回緯度/経度を参照するのではなく、その場所の名前、MyHouse などを保持することをお勧めします。名前とロンギ/ラティはどちらも同じものを指します。

aはラベルです。&aロンギ/ラティに似ています

編集:についてint b[10]。配列名は単純なラベルではありません。それらはポインターとしても機能するため、*それらを逆参照するために使用できます

于 2013-05-15T13:57:34.903 に答える