私はHSWでこのプログラムに出くわしました:
int *p;
int i;
p = (int *)malloc(sizeof(int[10]));
for (i=0; i<10; i++)
*(p+i) = 0;
free(p);
ループを完全には理解していません。p
メモリがバイトアドレス可能であり、各整数が4バイトのメモリを使用し、アドレス0
からへのポインタに40バイトのメモリを割り当てると仮定します39
。
さて、私が理解していることから、ポインタp
には最初に値0
、つまり最初のメモリ位置のアドレスが含まれています。ループでは、後続の整数にアクセスするために変位がポインタに追加されます。
39
変位値が。だけの場合、メモリアドレスがどのようにアクセスされるのか理解できません0 to 9
。確認したところ、ポインターが4の倍数でインクリメントされていることがわかりました。これはどのように発生しますか?整数型のポインタが原因だと思います。各ポインタは、データ型のサイズだけインクリメントされると思われます。これは本当ですか?
しかし、整数ポインタを使用して実際にメモリ位置2をポイントしたい場合はどうなりますか。だから、私はこれを行います:p = 2
。次に、このポインターを逆参照しようとすると、セグメンテーション違反が発生する可能性がありますか?