ポインタの値は変数のアドレスです。なぜint pointer
の値が4バイト増加したのですか。intポインタが1増加した後になぜintポインタ '++'は1ではなく4だけインクリメントするのですか?
私の意見では、ポインタの値(変数のアドレス)はポインタの増分後に1バイトだけ増加すると思います。
テストコード:
int a = 1, *ptr;
ptr = &a;
printf("0x%X\n", ptr);
ptr++;
printf("0x%X\n", ptr);
期待出力:
0xBF8D63B8
0xBF8D63B9
実際に出力:
0xBF8D63B8
0xBF8D63BC
EDIT:
アン他の質問 - int
が1つ1つを占める4バイトを訪問するには?
"' void *は不完全な型なので 'void *'をインクリメントすることはできません " - true、しかしgccは' void * 'を拡張子としてサポートしています(' char * 'のように扱います)。 –
整数の場合はほとんど意味がありませんが、可変長構造の配列のような状況では完璧な意味があります(「パケットがいっぱいのバッファがあるので、CurrentPacketPointerを次のパケット")。 –
"実際に1バイトを移動したい場合は、char *を増やしてください。charのサイズは常に1です。"いいえ、常に1つではありません。代わりに 'uint8_t'を使用してください。 – Winter