iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 4
1
Software Development

挑戰 30天內送審一支APP 系列 第 4

如何印出記憶體位址 (D day + 3)

前一篇提到,Class 與 struct 最大的區別在於呼叫的方式分別為 call by value以及 call by reference,也嘗試著印出 class 與 struct 內變數的值是否相同來印證,這次我們試著印出各個變數的記憶體位址來進一步證明。

關於印出記憶體位址,這次我們使用 “ withUnsafePointer “ 這個函數

struct

struct Svalue {
    var x:Int = 0
}
var f1 = Svalue()
var f2 = f1
f2.x = 30

withUnsafePointer(to: &f1.x) {
    print("The memory address of f1 = \($0)"," , the value of x in f1 is \(f1.x)" )
}

withUnsafePointer(to: &f2.x) {
    print("The memory address of f2 = \($0)"," , the value of x in f2 is \(f2.x)" )
}

結果為

class

class Cvalue {
    var y:Int = 0
}
var f3 = Cvalue()
var f4 = f3
f4.y = 50

withUnsafePointer(to: &f3.y) {
    print("The memory address of f3 = \($0)"," , the value of y in f3 is \(f3.y)" )
}

withUnsafePointer(to: &f4.y) {
    print("The memory address of f4 = \($0)"," , the value of y in f4 is \(f4.y)" )
}

結果為

由以上結果可以知道
f1 , f2 在struct內的記憶體位址是不同,而f3 , f4 在class則是指向同一個記憶體位址。


上一篇
兩種不同的宣告 : class 與 struct (D day + 2)
下一篇
使用storyboard 來建立第一個app ( D day + 4 )
系列文
挑戰 30天內送審一支APP 30

1 則留言

0
陳董 Don
iT邦新手 5 級 ‧ 2017-12-23 16:41:04

素晴らしい~

我要留言

立即登入留言