定义一个指针来引用相同的变量名引用?

时间:2014-09-05 09:47:29

标签: c++ objective-c c pointers

在objective-c中,我真的无法理解:

void *x = &x;

我的理解是:

声明一个泛型指针(因此类型为void *),指针变量名称为x,并且此指针指向对变量的引用(应该已经声明 - 但它不是)命名为x。

对我来说非常困惑!

3 个答案:

答案 0 :(得分:5)

总结这个宣言是否

void *x = &x;

是有效的,您应该考虑C标准中的两个重要引用。

第一个说明标识符范围的开始位置(6.2.1标识符范围)

  

7结构,联合和枚举标记的范围从一开始就是   在声明了的类型说明符中出现标记之后   标签。每个枚举常量的范围都在此之后开始   枚举器列表中定义的枚举器的外观。的不限   其他标识符具有在完成后立即开始的范围   它的声明者。

第二个说明是否可以将任何类型的指针分配给指向void的指针(6.3.2.3指针)

  

1指向void的指针可以转换为指向any的指针   对象类型。 指向任何对象类型的指针可以转换为   指向无效并再次返回;结果应该等于   原始指针。

所以在这个宣言中

void *x = &x;

变量x的范围在赋值运算符之前立即开始。其完整类型为void *,可以为其分配任何其他类型的指针。在右侧有void **类型的表达式。根据第二个引用,它可以分配给x,因为x是指向void的指针。

结果x将存储自己的地址。

答案 1 :(得分:2)

对于C和C ++:

x被分配了自己的地址。它后来表明了自己。

答案 2 :(得分:0)

基于对@alk答案的理解:

正如您所说:

int y = 10;
void* x = &y;

但是在不同情况下,x指向自身而不是y