According to the answer of Martin R.
addressOf () cannot be used with structured variables. String is a structure, however, it automatically connects to NSString when passing a function that expects an object.
According to nschum's answer, you can get the (stack) address of a struct , such as a built-in type or object, for example:
import UIKit func address(o: UnsafePointer<Void>) -> Int { return unsafeBitCast(o, Int.self) } func addressHeap<T: AnyObject>(o: T) -> Int { return unsafeBitCast(o, Int.self) } struct myStruct { var a: Int } class myClas { } //struct var struct1 = myStruct(a: 5) var struct2 = struct1 print(NSString(format: "%p", address(&struct1))) // -> "0x10f1fd430\n" print(NSString(format: "%p", address(&struct2))) // -> "0x10f1fd438\n" //String var s = "A String" var aa = s print(NSString(format: "%p", address(&s))) // -> "0x10f43a430\n" print(NSString(format: "%p", address(&aa))) // -> "0x10f43a448\n" //Class var class1 = myClas() var class2 = class1 print(NSString(format: "%p", addressHeap(class1))) // -> 0x7fd5c8700970 print(NSString(format: "%p", addressHeap(class2))) // -> 0x7fd5c8700970 unsafeAddressOf(class1) //"UnsafePointer(0x7FD95AE272E0)" unsafeAddressOf(class2) //"UnsafePointer(0x7FD95AE272E0)" //Int var num1 = 55 var num2 = num1 print(NSString(format: "%p", address(&num1))) // -> "0x10f1fd480\n" print(NSString(format: "%p", address(&num2))) // -> "0x10f1fd488\n"
I found that if myStruct does not matter, the address will be kept the same:
struct myStruct { } var struct1 = myStruct() var struct2 = struct1 print(NSString(format: "%p", address(&struct1))) // -> ""0xa000000000070252\n"" print(NSString(format: "%p", address(&struct2))) // -> ""0xa000000000070252\n""
luiyezheng
source share