ホームページ >バックエンド開発 >C++ >C で整数ポインターをインクリメントすると 4 バイト増加するのはなぜですか?

C で整数ポインターをインクリメントすると 4 バイト増加するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-29 22:37:14998ブラウズ

Why Does Incrementing an Integer Pointer in C Increase by 4 Bytes?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。