2013-10-21 28 views
1

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

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

我可以坚持字面在一个文件中的某个地方,并通过extern提到它更明确地做到这一点,但我想知道如果我能避免这样做。

回答

2

这将是从C99草案实现定义的行为标准节6.4.5字符串字面款说:

这是不确定的不管这些数组是否不同,只要它们的元素具有适当的值即可。如果程序试图修改这样一个数组,行为是 未定义。

+0

好的,看起来像我必须以正确的方式做到这一点,甚至在同一个文件中看到它不能保证。 – Claudiu

2

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

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

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

这可能感兴趣的:Addresses of two pointers are same?

相关问题