zoukankan      html  css  js  c++  java
  • 指针变量

    一个指针的值是另一个变量的地址。一个指针对应变量在内存中的存储位置。并不是每一个
    值都会有一个内存地址,但是对于每一个变量必然有对应的内存地址。通过指针,我们可以
    直接读或更新对应变量的值,而不需要知道该变量的名字(如果变量有名字的话) 。

    如果用“var x int”声明语句声明一个x变量,那么&x表达式(取x变量的内存地址) 将产生一个
    指向该整数变量的指针,指针对应的数据类型是 *int ,指针被称之为指向int类型的指针

    普通变量x的 指针表示为 &x


    如果指针名字为p,那么可以说“p指针指向变量x”,或者说“p指针保存了x变量的内存地址
    同时 *p 表达式对应p指针指向的变量的值
    指针变量p指向的值表示为*p

    x := 1
    p := &x // p, of type *int, points to x
    fmt.Println(*p) // "1"
    *p = 2 // equivalent to x = 2
    fmt.Println(x) // "2"
    

      

     

    当调用一个函数时,会对其每一个参数值进行拷贝,如果一个函数需要更新一个变量,或者
    函数的其中一个参数实在太大我们希望能够避免进行这种默认的拷贝,这种情况下我们就需
    要用到指针了。

    func (p *Point) ScaleBy(factor float64) {
    p.X *= factor
    p.Y *= factor
    }
    

    1. 不管你的methodreceiver是指针类型还是非指针类型,都是可以通过指针/非指针类型
    进行调用的,编译器会帮你做类型转换。
    2. 在声明一个methodreceiver该是指针还是非指针类型时,你需要考虑两方面的内部,第
    一方面是这个对象本身是不是特别大,如果声明为非指针变量时,调用会产生一次拷
    贝;第二方面是如果你用指针类型作为receiver,那么你一定要注意,这种指针类型指向
    的始终是一块内存地址,就算你对其进行了拷贝。熟悉C或者C艹的人这里应该很快能明
    白。

  • 相关阅读:
    Unity3D游戏制作(四)——Asset Server搭建
    查询开户银行的现代化支付行号
    专业版Unity技巧分享:使用定制资源配置文件
    如何建立一个完整的游戏AI
    实现简易而强大的游戏AI——FSM,有限状态机
    iOS 开发 初级:应用内购买 In-App Purchase
    linux每日命令(14):less命令
    flask上传excel文件,无须存储,直接读取内容
    linux每日命令(13):more命令
    linux每日命令(12):nl命令
  • 原文地址:https://www.cnblogs.com/tomhuang/p/11542356.html
Copyright © 2011-2022 走看看