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

时间:2011-05-18 21:46:27

标签: c

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

int *p;

不是:

long int *p;

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

5 个答案:

答案 0 :(得分:8)

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

例如:

int *p;

double *d;

pointers p和d“通常”具有相同的大小,但它们指向的数据大小不同。

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

约翰解释说:

  

例如,一个char   *在字寻址系统上实际上可能比int *大,   因为它需要指定一个偏移量   进入这个词。唯一的保证是   void *和char *具有相同的   对齐和表示,那   指向兼容类型的指针有   相同的对齐和表示,   指向struct类型的指针有   相同的对齐和表示,以及   指向联合类型的指针都有   相同的对齐和表示

答案 1 :(得分:3)

long int *表示指向long int 它并不意味着长指针。

指针是单独的东西,将有自己的大小。 (取决于你正在编译的位数)

答案 2 :(得分:1)

int *不属于int类型。它是一种指针类型。因此它足够大以存储任何地址。 long int *int *的大小相同 - 只是因为你正在处理事物的不同之处。

答案 3 :(得分:1)

这是一个指向int的指针(我倾向于写为'int * p')。这基本上意味着p是指向int的指针。

第二个是指向long int的指针。

它们都是指针,因此存储的字节数相同,但一个引用一个int,另一个引用long int。

答案 4 :(得分:0)

不要将指针的类型与指向的类型混淆。 表达式 *p的类型为int,但p的类型为int *