1

さて、私はポインターを学んでいますが、ポインターが配列でどのように機能するかを理解するのに苦労しています。

基本的にこれを考える:

int a[5] = {1,2,4,7,7}; // (allocated at 0xA000)    
int b[5] = {4,3,5,1,8}; // (at 0xA0020)    
short *c[2];            // (at 0xA0040)
c[0] = (short *)b;
c[1] = (short *)a;

これらの計算の値を決定することになっています。

c[0] + 4 

私の理解cでは、ポインターの配列です。c[0]array の最初の要素へのポインタを保持する short ですb。Why is is is is notbで始まり、代わりに it isです。0xA0020c[0] + 40xA00240xA0028

また、 の値をどのように決定すればよいでしょうかc[1][2]cは多次元配列ではないので、この計算はどのように機能しますか?

ありがとうございました!

4

6 に答える 6

5

実際には、ポインターに数値を追加すると、この数値は、指している要素のサイズで乗算されshortます (この場合は があるためshort*)。のサイズはshortお使いのコンピューターではおそらく 2 バイトであるため、アドレスに 4*2 が追加され、8 になります。

この概念を説明する MSDN からのリンクを次に示します。

ここをクリック

于 2013-10-11T06:04:31.340 に答える
1

これは、短整数のサイズが 2 バイトであるためです。

c[0] +4 を実行すると、「c から 4 つの完全なスペースを前方に移動する」ということになります。ここで、「スペース」は c が指す型のサイズです (短いので 2 バイト)。

c が char* の場合、結果は A0024 になります (char のサイズは 1 バイトであるため)。長い場合は、代わりに A0030 またはそれ以上を取得します。

于 2013-10-11T06:05:08.507 に答える
1

c[0] は、ポインターを保持する short ではありません。しかし、それは短所へのポインタです。増分は、それが指すもののサイズに基づいています。他の人が説明したばかりのようです。

于 2013-10-11T06:06:44.090 に答える