[swift学习之十五]指针练习

原创 2016年06月02日 12:23:46
//------------------------//
        /*
         1:UnsafeMutablePointer为可变的,UnsafePointer不可变的
         2:UnsafeMutablePointer其实是个struct,带泛型的。
         3:下面写法错误,不能直接获取指针,这点很重要啊,和c++的重要区别
         let a = 100
         let b = &a
         */
        /*形参*/
        func IncInt(ptr: UnsafeMutablePointer<Int>) ->Int{
            ptr.memory+=1
            return ptr.memory
        }
        /*IncIntNomal与IncInt效果等价的,肯定推荐IncIntNomal*/
        func IncIntNomal(inout ptr: Int) ->Int{
            ptr+=1
            return ptr
        }
        var intValue = 5
        IncInt(&intValue)
        IncIntNomal(&intValue)
        /*变量类型
         1:public init(bitPattern: Int)用这个方法初始化,意思是直接指明内存地址。
         2:public init()这个说是要在3.0后淘汰。
         3:对于alloc的用法也没理解清楚,说是申请类型*个数的空间,但我只alloc(1),居然也能用3个。
         4:sizeof(Character)=9,这个有些大啊,但肯定不是hashValue占空间,因为bool也有hashValue,但它们相距的地址为16字节哦~
         5:为Int类型的时候,可以不initialize,但得到的值不是0。Character必须initialize再用。
        */
        let OnePtr = UnsafeMutablePointer<Character>.alloc(1)
        let TwoPtr = OnePtr.successor()
        let ThreePtr = TwoPtr.successor()
        OnePtr.initialize("a")
        TwoPtr.initialize("b")
        ThreePtr.initialize("c")
        print("one:\(OnePtr) two:\(TwoPtr) Three:\(ThreePtr)")
        print("one:\(OnePtr.memory) two:\(TwoPtr.memory) Three:\(ThreePtr.memory)")
        print("one distanceto Three:\(OnePtr.distanceTo(ThreePtr))")
        /*数组指针
         1:数组必须是var的,否则有错误。
         2:想打印数组的地址,还不支持&arrInt写法。哎~,只能认为arrOnePtr的地址就是数组地址。
         */
        var arrInt:[Int] = [3,5,8,1,9]
        let arrPtr = UnsafeMutableBufferPointer<Int>(start: &arrInt, count: arrInt.count)
        let arrOnePtr = arrPtr.baseAddress
        print("arrInt 地址:\(arrOnePtr)")
        /*转换
         1:用nilLiteral:()初始化为nil,地址为0.和init(bitPattern: 0)效果一样。
         2:IntToPointer这样可以直接得到某个对象的指针,不知道withUnsafeMutablePointer真正存在的意义,而且还能扩展,如下:
         extension Int{
            mutating func ToPointer() -> UnsafeMutablePointer<Int> {
            func ToPointerDetail(Ptr :UnsafeMutablePointer<Int>) -> UnsafeMutablePointer<Int>{
                return Ptr
           }
            return ToPointerDetail(&self)
           }
         }
         */
        var changePtr = UnsafeMutablePointer<Int>.init(bitPattern: 0)
        func IntToPointer(pSource: UnsafeMutablePointer<Int>)->UnsafeMutablePointer<Int>{
            return pSource
        }
        withUnsafeMutablePointer(&intValue, {(ptr:UnsafeMutablePointer<Int>) -> Void in
            changePtr = ptr
        })
        changePtr.memory = 30
        print(intValue)//30
        
        let ChangePtrEx = intValue.ToPointer()
        ChangePtrEx.memory = 20
        print(intValue)//20
        /*指针间转换
         ChangePtrVoidInt,ChangePtrEx和changePtr地址一样。
        */
       let ChangePtrVoid = withUnsafeMutablePointer(&intValue, {(ptr:UnsafeMutablePointer<Int>) -> UnsafePointer<Void> in
            return unsafeBitCast(ptr, UnsafePointer<Void>.self)
        })
        let ChangePtrVoidInt = unsafeBitCast(ChangePtrVoid, UnsafeMutablePointer<Int>.self)
        ChangePtrVoidInt.memory = 10
        print(intValue)//10
参考:http://mobile.51cto.com/iphone-464250.htm
版权声明:本文为博主原创文章,未经博主允许不得转载。

swift 地图详解(简单)

转发自 萧家大公子 原文连接http://blog.csdn.net/xf931456371/article/details/51348814 一 地图的基本使用 1 地图需要依赖的框架...
  • listen_to_rain
  • listen_to_rain
  • 2016年08月05日 10:23
  • 243

纯代码讲解swift的指针

swift 指针
  • itpeng523
  • itpeng523
  • 2016年07月01日 16:21
  • 1313

Swift的函数与函数指针、闭包Closure等相关内容介绍

//函数 //demo1 无参数类型 func testConcat(){ println("测试函数"); } testConcat()//调用demo1 //demo2 多参数,一个返...
  • yangbo_hbzjk
  • yangbo_hbzjk
  • 2015年06月09日 11:08
  • 2077

Swift中使用C API时传递指针注意事项

Swift总的来说是一门比较容易编写的静态编译且略带一些动态特性的编程语言。由于Swift在2014年才刚诞生,因此当前在语法上修改的幅度比较大,尤其是从Swift 1.0到Swift 2.0;Swi...
  • zenny_chen
  • zenny_chen
  • 2016年08月09日 22:16
  • 1453

Swift 3.0中C语言指针类型在Swift编程语言中如何操作

Swift 3.0在2.0基础上做了许多改动,其中之一就是与C API的兼容性上。这里我将主要讲解一下C语言的指针与Swift编程语言的桥接在Swift 3.0中改成啥样了。...
  • zenny_chen
  • zenny_chen
  • 2016年12月04日 20:00
  • 2982

C-二级指针输出模型练习

C语言中二级指针输出模型主要目的在于使用被调函数中分配的内存 在主函数中定义一级指针,子函数输入参数定义为二级指针,则传递至子函数的参数为一级指针的地址。 #include #include ...
  • xingyuzhe
  • xingyuzhe
  • 2016年03月23日 15:08
  • 302

c语言指针使用小练习

#import void swap (int *a, int *b); void swap (int *a, int *b) { int temp; temp = *a;//通过改变...
  • quanzheng92
  • quanzheng92
  • 2014年07月26日 11:20
  • 2823

程序设计与算法 第八、九周测验

程序设计与算法 第八、九周测验
  • xiewen99
  • xiewen99
  • 2016年09月27日 17:56
  • 826

swift 学习资源 大集合

今天看到了一个swift的学习网站,里面收集了很多学习资源 Swift 介绍 Swift 介绍   来自 Apple 官方 Swift 简介 (@peng_gong) ...
  • sqc3375177
  • sqc3375177
  • 2014年06月07日 17:07
  • 16724

学习Swift笔记 (十五)Swift继承的用法

一个类可以继承另一个类的方法,
  • Panda_Samix_M
  • Panda_Samix_M
  • 2014年10月30日 09:57
  • 494
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[swift学习之十五]指针练习
举报原因:
原因补充:

(最多只允许输入30个字)