我正在使用objc_[sg]etAssociatedObject()
,并且此函数使用内存地址作为键。如果我将相同的字符串文字 - 例如"UIImageForTexture"
- 从两个不同的文件传递给函数,这两个字符串文字是否会具有:
- 相同的内存地址?
- 不同的内存地址?
- 这取决于其他一些因素。
- 它是未定义的。
我可以通过将文字粘贴在某个文件中并通过 an 引用它来更明确地做到这一点,extern
但我想知道我是否可以避免这样做。
我正在使用objc_[sg]etAssociatedObject()
,并且此函数使用内存地址作为键。如果我将相同的字符串文字 - 例如"UIImageForTexture"
- 从两个不同的文件传递给函数,这两个字符串文字是否会具有:
我可以通过将文字粘贴在某个文件中并通过 an 引用它来更明确地做到这一点,extern
但我想知道我是否可以避免这样做。
具有相同内容(例如)的两个字符串文字是否char *p1="abc;
char *p2="abc";
具有相同的地址或不同的地址是实现细节。p1
并且p2
可以相等也可以不相等。C标准不保证它们。
所以答案是(3)这取决于实现/优化。
您可以使用指向它们的指针并改为传递它们,而不是直接传递字符串文字。这样,您就可以可靠地处理它们,而不必担心 (1) 和 (2)。
这可能很有趣:两个指针的地址相同吗?
这将是 C99 草案标准部分6.4.5
字符串文字第6段中定义的实现行为:
如果它们的元素具有适当的值,则未指定这些数组是否不同。如果程序尝试修改这样的数组,则行为未定义。