【问题标题】:Why memory address is not changed for different instances of struct?为什么不同结构实例的内存地址不会改变?
【发布时间】:2019-12-23 01:05:44
【问题描述】:

由于structsSwift中是值类型,所以它们的内存当然是在上分配的。

我的问题是,为什么struct的不同实例分配在同一个变量中时,内存地址没有改变。

说明:

对于下面的struct

struct Person {
    var name: String

    init(_ name: String) {
        self.name = name
    }
}

如果我创建Person 的实例,

var p = Person("John")
withUnsafePointer(to: &p) {
    print("\(p) has address: \($0)") //0x000000010dcea3c0
}
p = Person("Jennifer")
withUnsafePointer(to: &p) {
    print("\(p) has address: \($0)") //0x000000010dcea3c0
}
p = Person("Lisa")
withUnsafePointer(to: &p) {
    print("\(p) has address: \($0)") //0x000000010dcea3c0
}

为什么每次都打印同一个地址?

【问题讨论】:

    标签: swift memory struct


    【解决方案1】:

    这是因为您使用的是相同的变量。举个例子

    var p(这是分配内存来保存你的值)

    现在您只是更改值而不是已分配到内存位置的变量。

    【讨论】:

    • 那么p里面的内容呢?那会有不同的地址吗?
    • @PGDev,您可以在地址内更新您的内容,这就是这里发生的事情。所以当你尝试在这个地址打印内容时,它会被更新。
    猜你喜欢
    • 2016-05-27
    • 2020-03-06
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 2017-12-11
    • 2018-03-25
    • 1970-01-01
    相关资源
    最近更新 更多