我正在通过阅读K&R并完成习题来学习C语言。现在我正在学习第五章,该章节涉及指针。我不理解以下语句的原因:
int *p;
不是:
long int *p;
因为*p包含一个地址,而且不能保证int类型的变量足够大来容纳一个大地址。但是有没有办法呢?
我正在通过阅读K&R并完成习题来学习C语言。现在我正在学习第五章,该章节涉及指针。我不理解以下语句的原因:
int *p;
不是:
long int *p;
因为*p包含一个地址,而且不能保证int类型的变量足够大来容纳一个大地址。但是有没有办法呢?
int是指针所指对象的类型,而不是指针本身的大小。指针的大小与其所指向的对象无关。
例如:
int *p;
double *d;
指针p和d“通常”具有相同的大小,但它们指向的数据大小不同。
编辑:正如评论中指出的那样,指针实际上并非“必须”具有相同的大小。
正如John所解释的:
例如,在一个字寻址系统上,char*实际上可能比int*大,因为它需要指定一个偏移量。唯一的保证是void*和char*具有相同的对齐方式和表示形式,指向兼容类型的指针具有相同的对齐方式和表示形式,指向结构类型的指针具有相同的对齐方式和表示形式,而指向联合类型的指针都具有相同的对齐方式和表示形式。
long int *
表示指向long int
的指针。
它并不意味着一个长指针。
指针是独立的东西,将有自己的大小。(取决于你编译的位数)
int *
不是 int
类型。它是一个指针类型。因此,它将足够大以存储任何地址。long int *
与 int *
大小相同 -- 只是您将指向的位置视为不同而已。
这是一个指向 int 的指针(我倾向于写成 'int* p')。这基本上意味着 p 是一个指向 int 的指针。
第二个是指向 long int 的指针。
它们都是指针,因此存储的字节数相同,但一个引用 int,另一个引用 long int。
double
和int
的指针不必具有相同的大小。 - Carl Norumchar *
可能比int *
更大,因为它需要指定一个偏移量到字中。唯一的保证是void *
和char *
具有相同的对齐和表示方式,指向兼容类型的指针具有相同的对齐和表示方式,指向struct
类型的指针具有相同的对齐和表示方式,指向union
类型的指针都具有相同的对齐和表示方式。 - John Bodevoid *
和函数指针具有相同的表示)。 - R.. GitHub STOP HELPING ICE