1

我正在使用objc_[sg]etAssociatedObject(),并且此函数使用内存地址作为键。如果我将相同的字符串文字 - 例如"UIImageForTexture"- 从两个不同的文件传递给函数,这两个字符串文字是否会具有:

  1. 相同的内存地址?
  2. 不同的内存地址?
  3. 这取决于其他一些因素。
  4. 它是未定义的。

我可以通过将文字粘贴在某个文件中并通过 an 引用它来更明确地做到这一点,extern但我想知道我是否可以避免这样做。

4

2 回答 2

2

具有相同内容(例如)的两个字符串文字是否char *p1="abc; char *p2="abc";具有相同的地址或不同的地址是实现细节。p1并且p2可以相等也可以不相等。C标准不保证它们。

所以答案是(3)这取决于实现/优化。

您可以使用指向它们的指针并改为传递它们,而不是直接传递字符串文字。这样,您就可以可靠地处理它们,而不必担心 (1) 和 (2)。

这可能很有趣:两个指针的地址相同吗?

于 2013-10-21T21:47:12.580 回答
2

这将是 C99 草案标准部分6.4.5 字符串文字6段中定义的实现行为:

如果它们的元素具有适当的值,则未指定这些数组是否不同。如果程序尝试修改这样的数组,则行为未定义。

于 2013-10-21T21:53:49.167 回答