たとえば、私の64ビットのubuntuマシンでは、ポインタの長さは2バイトで、1つのメモリアドレスを持っているので、それが指している長いintまたはintに関係なく、常に2バイトですか?
もしそうなら、それが指すデータのタイプを決定するポイントは何ですか? 以下のコードでは、互換性のない警告の目的を除いて、データが何バイトを表しているか%hu
を andを使用して示し%lu
ているため、ポインタが int であろうと long であろうと、結果は同じです。誰かヒントをくれませんか?
#include <stdio.h>
int main(void) {
int *ptr1;
long int *ptr2;
long int a = 0xffffffff;
ptr1 = &a;
ptr2 = &a;
printf("the value should the same as 2 ** 16 %hu", *ptr1);
printf("the value should the same as 2 ** 32 %lu", *ptr2);
return 0;
}
アップデート:
私が考えることができるポインターのタイプを決定する別の目的は、次のようなポインター演算です。
ptr + 1
、常に特定の値ではなく、データ型が持つバイトの長さをスキップします