我正在通过阅读K&R并进行练习来学习c.我现在在第5章处理指针.我不明白为什么声明:
int *p;
Run Code Online (Sandbox Code Playgroud)
不是:
long int *p;
Run Code Online (Sandbox Code Playgroud)
因为*p包含一个地址,并且不能保证int类型的变量足够大以容纳一个大地址.还是有吗?
int是指针指向的对象的类型,而不是指针本身的大小.指针的大小与它指向的对象无关
例如:
int *p;
double *d;
Run Code Online (Sandbox Code Playgroud)
无论pointersp和d将"正常"的大小相同,但它们指向的数据不具有相同的尺寸.
编辑:正如评论中指出的那样,指针实际上并不是"必须"具有相同的大小.
约翰解释说:
例如,字寻址系统上的char*实际上可能大于int*,因为它需要指定字中的偏移量.唯一的保证是void*和char*具有相同的对齐和表示,指向兼容类型的指针具有相同的对齐和表示,指向struct类型的指针具有相同的对齐和表示,并且指向union类型的指针都具有相同的对齐和表示
| 归档时间: |
|
| 查看次数: |
210 次 |
| 最近记录: |