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

整数ポインターをインクリメントすると、1 バイトではなく 4 バイトが追加されるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-25 22:23:12404ブラウズ

Why Does Incrementing an Integer Pointer Add 4 Bytes Instead of 1?

Int ポインタのインクリメント: なぜ 4 バイト インクリメントするのですか?

ポインタを扱うとき、直感的には、 int ポインタは、配列の場合と同様に、その値を 1 バイトずつ進めます。ただし、実際には、int ポインタをインクリメントすると、その値は 4 バイトずつ増加します。

4 バイト インクリメントの理由

この動作の理由は、整数データ型のサイズ。 int は通常、4 バイトのメモリを占有します。 int ポインターが 1 バイトだけ増加すると、部分的な整数を指すことになり、意味がありません。

ポインターの増分について

するにはたとえば、次のメモリ表現を考えてみましょう:

[...| 0 1 2 3 | 0 1 2 3 | ...]
[...| int     | int     | ...]

ここでは、各 int が占有します。 4バイト。 int ポインタが 1 ずつ増加すると、以下に示すように次の 4 バイト セクションに移動するのが論理的に理にかなっています。

             [↓      ]
[...| 0 1 2 3 | 0 1 2 3 | ...]
[...| int     | int     | ...]

これにより、ポインタは有効な整数を指し続けることが保証されます。

個々のバイトへのアクセス

必要な場合整数の個々のバイトにアクセスするには、char ポインタを利用できます。 char のサイズは常に 1 バイトであるため、char* ポインターを使用して一度に 1 バイトずつ増加し、整数の対応するバイトにアクセスできます。

例:

int i = 0;
int* p = &i;

char* c = (char*)p;
char x = c[1]; // access the second byte of the integer

追記:

です。 void は不完全な型であり、サイズが定義されていないため、void* ポインターのインクリメントは許可されていないことを覚えておくことが重要です。

以上が整数ポインターをインクリメントすると、1 バイトではなく 4 バイトが追加されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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