我寫了一些IBM Swift Sandbox短代碼,並會見了一個令人困惑的問題斯威夫特 - 數組元素的地址
我試圖讓數組元素的地址:
func printMemory(ptr: UnsafePointer<Int>){
print("At memory:\(ptr)")
}
var arr: [[Int]] = [
[0,1,2,3,4],
[0,1,2],
[0]
]
printMemory(&arr[0][0])
printMemory(&arr[1][0])
而這種代碼的輸出具有相同的地址。
通過將「UnsafePointer」更改爲「UnsafeMutablePointer」可以解決這個問題,但我不知道爲什麼會發生這種情況。
爲什麼我首先得到相同的地址,以及佔用那個地址的地址?
另一個問題我遇到:
另外,如果我只代碼的最後兩行更改爲:
printMemory(&arr[0])
printMemory(&arr[0][1])
的編譯會通過。
我預測我會得到一個錯誤,說arr [0]是[Int]類型與UnsafePointer中的Int類型不匹配。但沒有任何警告。
另外,這兩個地址彼此距離很遠。我無法解釋爲什麼。
通過使用printMemory()中的「UnsafeMutablePointer」可以獲得更近的地址。
我想我需要解釋爲什麼這個編譯會通過,爲什麼地址就像這樣。
對不起,我的英語語法不好,謝謝你的回覆!
FWIW,我在Linux上看不到使用'swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz'的行爲;它打印兩個不同的地址。 –
看起來像一個bug,在Xcode 7.3遊樂場我看到不同的內存位置:'在內存:0x00007fff50d86070''在內存:0x00007fff50d86058' – JAL
我可以在編譯的項目中使用Xcode 7.3重現此操作。我*假設*該值被複制到相同的內存位置,因爲它不能從該函數修改。 –