swift - 为什么内存地址不会因不同的结构实例而改变?

标签 swift memory struct

因为 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
}

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

最佳答案

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

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

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

关于swift - 为什么内存地址不会因不同的结构实例而改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57529164/

相关文章:

python - 缓冲区错误 : could not get scalar buffer information

c - 如何在运行时为结构数组赋值?

c++ - 在 C++ 中一般将 "optional"字段封装在结构中的最佳方法?

ios - 如何以编程方式更新 UITextView maximumNumberOfLines 并查看 UI 更新。

swift - 自定义标记在放大 map 时消失,并在使用聚类缩小 map 时出现

ios - 苹果代码签名后由于二进制文件受限而未加载 dylib 库

arrays - SKTextures 未加载到 iPod Touch 上的阵列中

java - ListView内存泄漏?

c++ - std::vector 和 std::list 内存布局

c++ - C++ 中匿名类型的嵌套结构