float の 2 つの C 配列を指す "UnsafePointer<Float>" 型の 2 つの変数があります。
それらが指すメモリの値にアクセスする方法はすでに知っています。
方法がわからないのは、両方が同じメモリを参照しているかどうかを判断することです(つまり、両方が同じアドレスを指しています)。
2 つの UnsafePointers によって格納されたメモリ アドレスが同じかどうかを確認するにはどうすればよいですか?
float の 2 つの C 配列を指す "UnsafePointer<Float>" 型の 2 つの変数があります。
それらが指すメモリの値にアクセスする方法はすでに知っています。
方法がわからないのは、両方が同じメモリを参照しているかどうかを判断することです(つまり、両方が同じアドレスを指しています)。
2 つの UnsafePointers によって格納されたメモリ アドレスが同じかどうかを確認するにはどうすればよいですか?
Swift ではUnsafePointer<T>
、プロトコルに準拠しているComparable
ため、単純にポインタを と比較できます==
。例:交流機能
float *foo(void);
としてSwiftにマッピングされます
func foo() -> UnsafePointer<Float>
次のコードはコンパイルされ、関数への後続の 2 つの呼び出しが同じポインターを返すかどうかをテストします。
let p1 = foo()
let p2 = foo()
if p1 == p2 {
println("equal")
}
Joachim がコメントで既に述べたように、ポインタの値はそれが指すメモリのアドレスです。したがって、ポインタが等しいということは、それらが同じメモリアドレスを指していることを意味します。