I、次のコードを持っている:"intの配列10へのポインタ"の使い方
#include<stdio.h>
int main()
{
int(* a)[10]; //declare a as pointer to array 10 of int
int b[10]; // taken a array of 10 int
b[2]=32;
a=&b;
printf("b is on %p\n",&b);
printf("a is on %p\n",a);
printf("magic is %d\n",a[2]); // why this is not showing 32
return 0;
}
出力:私は配列b
を指すINTのアレイ10にポインタとしてa
をとっている。ここで
b is on 0xbfa966d4
a is on 0xbfa966d4
magic is -1079417052
、今なぜa[2]
に32の値を取得できませんか?
a[2]
ので、今b
ので*(b+2)
と*(a+2)
が類似している配列のアドレスは、なぜ私はここに値32を取得していない午前た*(a+2)
として評価されますか?
編集:
a[2]
が*(a+2)
で、a+2
がAのとき が を参照してください...私は
(*a)[2]
を使用して答えを得たが、私はそれがどのように動作するか取得しておりませんプラス2 * sizeof(int[10])
バイト。
このように(*a)[2]
はどのように展開しますか? a
ので
(* a)[2]は[0]と同じです[2] – novice