v[2] の値が空ではなく -3、つまり 25 になる理由を誰かが説明できますか?
#include <stdio.h>
int main ()
{
int v[5];
int *z = &v[0];
*z=12;
z++;
*z=16;
z++;
*z=-3;
z++;
*z=25;
printf ("%d", v[2]);
return 0;
}
#include <stdio.h>
int main ()
{
int v[5];
int *z = &v[0]; // z points to v[0]
*z=12; // v[0] = 12
z++; // z points to v[1] now
*z=16; // v[1] = 16
z++; // z points to v[2] now
*z=-3; // etc
z++; // etc
*z=25; // etc
}
z
整数の配列へのポインタです。このコードは次のとおりです。
*z=12;
v[0]=12;
z が逆参照されているため、と同等です。
ただし、 をインクリメントしていません*z
。これは参照解除されたポインタであり、v[0]
のv[0]
値がインクリメントされます。
代わりにz
、ポインタ自身の値である をインクリメントしています - のアドレスですv[0]
。
z
はポインターであり、ここでインクリメントするとz++;
、結果は基本的に配列内の次の要素になりv[0]
ます。
コードでは、結果の配列は次のように埋められます。
*z=12;
=v[0]=12;
z++;
*z=16;
=v[1]=16;
等々。
これは配列の 3 番目の要素であるため、毎回 -3 を取得しています (0 は最初の配列スロットとしてカウントされることに注意してください)。Z (Z++) をインクリメントするたびに、次に利用可能なスロットを指します。*Z = some_Number は、単にその値を指定された配列スロットに割り当てます。
printf ("%d", v[3]); //should give you 25