cのint pointersの増分:4バイト増分
をcin cで発表すると、ポインター算術ルールは、インターポインターの結果を増やすことを決定します。予想される1バイト増分ではなく、4バイトの増分で。この矛盾は多くのプログラマーを困惑させ、
q:int pointer '' ''増分を1?
4バイトによるintポインターの増分は、指すデータ型のサイズに関連しています。各int変数は4バイトのメモリを占有するため、intポインターを増やすと、メモリの4バイト離れた場所にある次のintにポインターを移動します。 &&&] int a = 1、 *ptr; ptr =&a; printf( "%p \ n"、ptr); PTR; printf( "%p \ n"、ptr);
予想出力:
0xbf8d63b8 0xbf8d63b9int a = 1, *ptr; ptr = &a; printf("%p\n", ptr); ptr ; printf("%p\n", ptr);
実際の出力:
0xbf8d63b8 0xbf8d63bcint a = 1, *ptr; ptr = &a; printf("%p\n", ptr); ptr ; printf("%p\n", ptr);出力の違いは、4バイトの増加によるものです。予想される出力は1バイトの増分を示していますが、実際の出力は4バイトジャンプを示し、メモリアドレスの顕著なジャンプにつながります。 &&&]
q:intが1つを占める4バイトにアクセスする方法1つ?
int a = 1, *ptr; ptr = &a; printf("%p\n", ptr); ptr ; printf("%p\n", ptr);a:
intの個々のバイトにアクセスするには、1バイトのサイズのcharポインターにintポインターをキャストできます。次に、チャーポインターをインクリメントして、int int* p =&i; char* c =(char*)p; char x = c [1]; // int
に1つのバイトがint に、int変数Iの最初のバイトはc [1]式を使用してアクセスされます。 cポインターをインクリメントして、int。
さまざまなデータ型のポインター算術ルールを理解することが重要であることが重要です。 INTポインターの4バイト増分の背後にある理由を理解することにより、一般的な落とし穴を防ぎ、より効率的なコードを書き込むことができます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3