1

私はCを調べていて、本「Pointers on C」から理解できなかった次の例に来ました。これがコードです。

次の宣言は、1 つのソース ファイルに存在します。

int     a[10];
int     *b = a;

しかし、別のソース ファイルでは、次のコードが記述されています。

extern         int    *a;
extern         int    b[];
int            x, y;
...
x = a[3];
y = b[3];

2 つの割り当てステートメントが実行されると何が起こるか、誰か説明できますか? (整数とポインタの両方が 4 バイトを占めると仮定します。)

コードを実行しようとすると、セグメンテーション違反が発生しx、コメントアウトして y の値を出力すると、0 になりました。概念は、ポインターと配列の違いでした。

4

1 に答える 1

5

何が起こるかは未定義の動作であり、あなたの場合はセグメンテーション違反として現れます。

代わりにこれが必要になる可能性が最も高いです:

int     a[10];
int     *b = a;

extern         int    *b;
extern         int    a[];

そして、両方の代入はa、インデックス 3 で の要素をフェッチし、それをxandに配置しyます。

于 2012-06-30T05:06:20.007 に答える