Swift和C语言混合编程教程

2020-01-08 22:36:29王旭

当一个函数被声明为接受CConstPointer<Type>参数时,这个函数可以接受下列任何一个类型作为参数:

•nil,作为空指针传入
•一个CMutablePointer<Type>, CMutableVoidPointer, CConstPointer<Type>, CConstVoidPointer, 或者在必要情况下转换成CConstPointer<Type>的AutoreleasingUnsafePointer<Type>值
•一个操作数是 Type 类型的左值的输入输出表达式,作为这个左值的内存地址传入
•一个Type[]数组值,作为一个数组的起始指针传入,并且它的生命周期将在这个调用期间被延长

复制代码
//Swift
func takesAConstPointer(x: CConstPointer<Float>) { /*...*/ } 

 

那么您可以使用以下任何一种方式来调用这个函数: 

复制代码
//Swift
var x: Float = 0.0
var p: CConstPointer<Float> = nil

 

takesAConstPointer(nil)
takesAConstPointer(p)
takesAConstPointer(&x)
takesAConstPointer([1.0, 2.0, 3.0])

 

当函数被声明使用一个CConstVoidPointer参数,那么这个函数接受任何和CConstPointer<Type> 相似类型的Type操作数。  如果您这样定义了一个函数:

 

复制代码
//Swift 
func takesAConstVoidPointer(x: CConstVoidPointer) { /* ... */ } 

 

那么您可以使用以下任何一种方式来调用这个函数:

 

复制代码
//Swift
var x: Float = 0.0, y: Int = 0
var p: CConstPointer<Float> = nil, q: CConstPointer<Int> = nil

 

takesAConstVoidPointer(nil)
takesAConstVoidPointer(p)
takesAConstVoidPointer(q)
takesAConstVoidPointer(&x)
takesAConstVoidPointer(&y)
takesAConstVoidPointer([1.0, 2.0, 3.0])
takesAConstVoidPointer([1, 2, 3])

 

自动释放不安全指针

当一个函数被声明为接受AutoreleasingUnsafePointer<Type>参数时,这个函数可以接受下列任何一个类型作为参数: