2013-10-21 63 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?

相關問題