在 Objective-C 中,我真的无法理解这一点:
void *x = &x;
我的理解是:
声明一个泛型指针(因此类型为 void*),指针变量名为 x,该指针指向变量的引用(应该已经声明了 - 但事实并非如此) 名为 x。
让我很困惑!
判断该声明是否成立
void *x = &x;
是有效的,您应该考虑 C 标准中的两个重要引用。
第一个表示标识符的范围从哪里开始(6.2.1 标识符的范围)
7 结构、联合和枚举标记的范围从
在声明类型说明符中的标签出现之后
标签。每个枚举常量的作用域都从该常量之后开始
其定义枚举数在枚举数列表中的外观。任何
其他标识符的作用域在完成后立即开始
它的声明者。
第二个表示是否可以将任何类型的指针分配给指向 void 的指针(6.3.2.3 指针)
1 指向 void 的指针可以与指向任何指针的指针相互转换
对象类型。指向任何对象类型的指针都可以转换为
指向空的指针然后再回来;结果比较等于
原始指针。
所以在这个声明中
void *x = &x;
变量 x 的作用域紧接在赋值运算符之前开始。其完整类型为void *
并且可以分配给任何其他类型的指针。右手有类型的表达void **
。根据第二个引用,它可以分配给 x,因为 x 是一个指向 void 的指针。
结果 x 将存储其自身的地址。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)