我很难理解这行代码:
static void *const Something = (void *)&Something;
" Something"出现在等号的两边? THX!
编辑:这是什么意思?为什么我们需要这种代码?还有其他选择吗?
答案 0 :(得分:7)
这意味着Something
是静态地址空间中指向自身的指针。它通常仅用于创建可用于键控的唯一值,具有objc_getAssociatedObject
等功能。
容器Something
将最终位于内存中相当任意的位置,例如0x12345。这行代码所说的是Something
的值应该设置为Something
的地址(&
运算符给出指针的地址)。所以你将0x12345放入内存位置0x12345。因为没有其他变量可以占用该内存地址,所以Something
保证相对于以这种方式创建的任何其他变量是唯一的。
关于在作业的两边使用变量:
x = x + 1;
一点也不奇怪,是吗?
对于您的问题,Something
的声明是在“行”结束之前有效的声明:static void *const Something
。
int x = x + 5;
也有效,但x未初始化,因此可能包含垃圾值。 &Something
只要在左侧宣布Something
,就会要求地址为真实的非垃圾值。