在Objective-C,我实在无法理解这一点:定义一个指向相同变量名称引用的引用的指针?
void *x = &x;
我的理解是:
声明泛型指针(因此,类型为void *),指针变量名称为x,而这指针指向一个名为x的变量的引用(,应该声明它已经 - 但它不是)。
非常令我困惑!
在Objective-C,我实在无法理解这一点:定义一个指向相同变量名称引用的引用的指针?
void *x = &x;
我的理解是:
声明泛型指针(因此,类型为void *),指针变量名称为x,而这指针指向一个名为x的变量的引用(,应该声明它已经 - 但它不是)。
非常令我困惑!
基于@alk答案的理解:
正是因为你说:
int y = 10;
void* x = &y;
但出来的情况下,X点本身,而不是y
总括是否声明
void *x = &x;
是有效的,您应该考虑C标准中的两个重要引号。
第一个表示其中的标识符开始的部份范围(标识符6.2.1作用域)
7结构,联合和枚举标签具有范围,标签的出现之后开始只是 一个声明 标签的类型说明符。每个枚举常量的范围在枚举器列表中定义的枚举器出现后立即开始。 任何 其他标识符的范围仅在其声明者 完成后开始。
第二个说,任何类型的指针是否可以被分配给一个指向void(6.3.2.3指针)
1中的孔隙的指针可被转换成或从一个指针到任何 对象类型。 指向任何对象类型的指针可能会被转换为 指针,并返回空值;结果应该等于 的原始指针。因此,在这个声明
void *x = &x;
variabble x的范围内立即赋值运算符之前启动。它的完整类型是void *
,它可以被分配任何其他类型的指针。在右边有void **
类型的表达式。根据第二个引用,它可以分配给x,因为x是指向void的指针。
由于结果x将存储它自己的地址。
谢谢,有关标识符范围开始的部分确实是可以回答问题的部分。 – JBL 2014-09-05 11:06:55
请添加评论作为评论你想评论的答案。或者也为自己的问题添加一个答案。 – alk 2014-09-05 09:54:45
“应该被宣布 - 但它不是” - 是的。宣言的要点来自*起始者之前。一旦你明白了,意思应该清楚。 – 2014-09-05 10:54:25
相关:http://stackoverflow.com/q/16270323/694576 – alk 2014-09-05 10:55:52