定义一个指向引用相同变量名称引用的指针?
在objective-c中,我真的无法理解这一点:
void *x = &x;
我的理解是:
声明一个generics指针(因此类型为void *),指针变量名称为x,并且此指针指向对变量的引用( 应该已经声明 – 但它不是已声明 ),名为x。
对我来说很困惑!
总结一下这个宣言是否合适
void *x = &x;
是有效的,您应该考虑C标准中的两个重要引用。
第一个说明标识符的范围从哪里开始(6.2.1标识符的范围)
7结构,联合和枚举标记具有在声明标记的类型说明符中标记出现之后开始的范围。 每个枚举常量都具有在枚举器列表中定义枚举器出现之后开始的范围。 任何其他标识符的范围都在其声明者完成之后开始。
第二个说明是否可以将任何类型的指针分配给指向void的指针(6.3.2.3指针)
1指向void的指针可以转换为指向任何对象类型的指针。 指向任何对象类型的指针可以转换为指向void的指针,然后再返回; 结果应该等于原始指针。
所以在这个宣言中
void *x = &x;
变种x的范围在赋值运算符之前立即开始。 它的完整类型是void *
,可以为它分配任何其他类型的指针。 在右手中有void **
表达式。 根据第二个引用,它可以分配给x,因为x是指向void的指针。
结果x将存储自己的地址。
对于C和C ++:
x
被赋予自己的地址。 之后它指向自己。
基于对@alk答案的理解:
正如你所说的那样:
int y = 10; void* x = &y;
但是在外面的情况下,x指向自己而不是y