在objective-c中,我真的无法理解:
void *x = &x;
我的理解是:
声明一个泛型指针(因此类型为void *),指针变量名称为x,并且此指针指向对变量的引用(应该已经声明 - 但它不是)命名为x。
对我来说非常困惑!答案 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