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

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

Mary-Kate Olsen
リリース: 2024-11-29 22:37:14
オリジナル
947 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート