/**
此函数用于将一个数组(Array)的首个元素的值做加1操作
- parameters:
- p: inout [Int]类型,传入的数组对象首地址
- returns: Void
*/
func test(inout p: [Int]) {
p[0] += 1
}
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
var a = 0
// 下面使用UnsafeMutablePointer自带的alloc类方法分配10个Int元素的存储空间
// 这个方法其实应该就是对malloc函数的封装了,用于外部的C接口十分有用
let buf = UnsafeMutablePointer<Int>.alloc(10)
let dst = UnsafeMutablePointer<Int>.alloc(10)
// 分别对buf与dst存储空间进行初始化赋值
for i in 0 ..< 10 {
buf[i] = i
dst[i] = 0
}
// 使用assignBackwardFrom将buf存储空间中后5个元素拷贝到dst存储空间的前5个元素中
dst.assignBackwardFrom(buf.advancedBy(5), count: 5)
// 用Array分配一个10个Int元素的数组对象arr
var arr = [Int](count: 10, repeatedValue: 0)
// 将dst中的所有元素拷贝到arr中
for i in 0 ..< 10 {
arr[i] = dst[i]
}
print(arr)
// 释放buf与dst。注意,这里必须用dealloc来释放,且里面的参数也要与alloc的参数对应!
// 不释放会引发内存泄漏
buf.dealloc(10)
dst.dealloc(10)
// arr数组对象指向另一个[1, 2, 3]数组字面量构成的Array对象
arr = [1, 2, 3]
// 调用test函数,使得arr的第一个元素的值加1
test(&arr)
print("arr = \(arr)")
// 这里使用Array的withUnsafeMutableBufferPointer方法将数组元素内容转为
// 指向一个连续存储空间的首地址。
// 所以p的类型为:UnsafeMutablePointer<Int>
let p = arr.withUnsafeMutableBufferPointer() {
// 这里,形参是一个含有一个UnsafeMutableBufferPointer的形参,
// 返回类型为UnsafeMutablePointer的函数类型。
(inout buffer: UnsafeMutableBufferPointer<Int>) -> UnsafeMutablePointer<Int> in
return buffer.baseAddress
}
a = 0
// 我们先查看原先数组对象中的元素内容
for i in 0 ..< 3 {
a += p[i]
}
print("a = \(a)")
// 我们通过p指针对象对数组arr的内容进行修改
p[0] -= 1
p[1] += 1
p[2] += 2
// 然后打印出修改后的arr数组对象中的元素内容
print("arr is: \(arr)")
// 这里用nulTerminatedUTF8方法先转为ContiguousArray<CodeUnit>对象类型,
// 其中,CodeUnit是UInt8类型。
// 然后用withUnsafeBufferPointer转为UnsafePointer<CChar>类型
let cstr = "abcd".nulTerminatedUTF8.withUnsafeBufferPointer() {
return UnsafePointer<CChar>($0.baseAddress)
}
// 这里再将刚才生成的UnsafePointer<CChar>类型的C格式字符串转回String对象
let string = String.fromCString(cstr)!
print("string is: \(string)")
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有