gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:50:27 25 4
gpt4 key购买 nike

我很难理解这行代码:

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

等号两边怎么会出现“Something”?谢谢!

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

最佳答案

这意味着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 后立即请求地址,该地址是真实的、非垃圾值。

关于objective-c - ObjC/C 语法 : static void *const Something = (void *)&Something;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25083017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com