私が読んでいる K&R 電子ブックで、次のコードに出くわしました。
そして、私の懸念は次の行にありました:
allocbuf + ALLOCSIZE - allocp >= n
このコードは、バッファーの開始位置のアドレスを取得し、それ自体へのポインターのインデックスと、上記で定義された最大バッファー長定数を使用して、残りの割り当ての合計を計算します。
たとえば、文字ポインターを定義する場合、算術的に 1 ずつインクリメントする必要があることを理解しました。
char *ptr = "array";
ptr++;
次に、メモリ内の 2 番目の位置 'r' を取得します。メモリ内では、実際には sizeof(char) 単位でインクリメントされます。
したがって、配列がポインターを装って動作することを考えると、次のようになります。
allocbuf + 10000
配列内で最後に割り当てられたスロットは正しいですか? ポインターは char 型であるため、10000 'slots' 後は実際には 10,000*sizeof(char) スロット後です。
この概念を明確にするために、たとえば 4210720 というランダムなメモリ アドレスが与えられた場合、4210721 はアドレスを超えたビット、バイト、またはその他のメティックを表しますか?
あれは:
void *ptr = "sherrellbc";
ptr++;
ptrは今どこに?タイプvoidはステップ長に関する情報を提供しないため、「s」と「h」の間のポインターにあります(たとえば、charポインターはsizeof(char)で増加します)。
本質的に、メモリはどのメトリックを使用して保存されますか? ビット、バイト、ニブルなど?