ObjC / C语法:static void * const Something =(void *)& Something;

时间:2014-08-01 14:56:39

标签: objective-c c

我很难理解这行代码:

static void *const Something = (void *)&Something;

" Something"出现在等号的两边? THX!

编辑:这是什么意思?为什么我们需要这种代码?还有其他选择吗?

1 个答案:

答案 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,就会要求地址为真实的非垃圾值。