int*p应该是long int*p吗?

gro*_*k12 5 c

我正在通过阅读K&R并进行练习来学习c.我现在在第5章处理指针.我不明白为什么声明:

int *p;
Run Code Online (Sandbox Code Playgroud)

不是:

long int *p;
Run Code Online (Sandbox Code Playgroud)

因为*p包含一个地址,并且不能保证int类型的变量足够大以容纳一个大地址.还是有吗?

Pep*_*epe 8

int是指针指向的对象的类型,而不是指针本身的大小.指针的大小与它指向的对象无关

例如:

int *p;

double *d;
Run Code Online (Sandbox Code Playgroud)

无论pointersp和d将"正常"的大小相同,但它们指向的数据不具有相同的尺寸.

编辑:正如评论中指出的那样,指针实际上并不是"必须"具有相同的大小.

约翰解释说:

例如,字寻址系统上的char*实际上可能大于int*,因为它需要指定字中的偏移量.唯一的保证是void*和char*具有相同的对齐和表示,指向兼容类型的指针具有相同的对齐和表示,指向struct类型的指针具有相同的对齐和表示,并且指向union类型的指针都具有相同的对齐和表示

  • 指向`double`和`int`的指针不必具有相同的大小. (2认同)