C での Int ポインターのインクリメント: 4 バイトの増分を明らかにする
C では、ポインター算術規則により、int ポインターをインクリメントすると結果が決まります。予想される 1 バイトの増分ではなく、4 バイトの増分です。この矛盾は多くのプログラマを困惑させており、次のような疑問が生じています。
Q: int ポインタ ' ' はなぜ 1 ではなく 4 ずつ増加するのですか?
A: int ポインターの 4 バイトの増分は、それが指すデータ型のサイズに関係します。各 int 変数は 4 バイトのメモリを占有するため、int ポインタをインクリメントすると、ポインタはメモリ内で 4 バイト離れた次の int に移動します。
テスト コード:
int a = 1, *ptr; ptr = &a; printf("%p\n", ptr); ptr++; printf("%p\n", ptr);
予想される出力:
0xBF8D63B8 0xBF8D63B9
実際の出力:
0xBF8D63B8 0xBF8D63BC
出力の違いは 4 バイトの増分によるものです。予想される出力では 1 バイトの増分が示されていますが、実際の出力では 4 バイトのジャンプが示されており、メモリ アドレスに顕著なジャンプが生じています。
追加の質問: Int バイトを個別に参照する
Q: int が 1 つを占める 4 バイトにアクセスする方法one?
A: int の個々のバイトにアクセスするには、int ポインタを 1 バイトのサイズの char ポインタにキャストできます。次に、char ポインタをインクリメントして、int のバイト間を移動できます。
例:
int i = 0; int* p = &i; char* c = (char*)p; char x = c[1]; // one byte into an int
この例では、int の最初のバイト変数 i には、c[1] 式を使用してアクセスします。 c ポインタをインクリメントして、int 内の後続のバイトにアクセスできます。
さまざまなデータ型のポインタ算術規則を理解することは、C プログラミングでメモリを正しく処理するために重要です。 int ポインターの 4 バイト増加の背後にある理由を理解することで、よくある落とし穴を防ぎ、より効率的なコードを作成できます。
以上がC で整数ポインターをインクリメントすると 4 バイト増加するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。