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

Gol*_*umb 5 c objective-c

我很难理解这行代码:

static void *const Something = (void *)&Something;
Run Code Online (Sandbox Code Playgroud)

如何在"等号"的两边出现"Something"?谢谢!

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

Fab*_*ian 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在左侧声明,就要求地址是真实的非垃圾值.