学习《GO语言学习笔记》的学习笔记之3.1 表达式 (详解)

版权声明:诸葛老刘所有 https://blog.csdn.net/weixin_39791387/article/details/87642826

本文适合初学者阅读

  • 运算符
    - 没有乘幂和绝对值运算符, 对应的是标准库math里的Pow, Abs函数
    - 自增,自减不再是运算符, 只能作为独立语句, 不能用于表达式.
    - 表达式通常是求值代码, 可作为右值或参数使用.
    - 表达式可以作为语句使用, 但语句不能当作表达式
    - 语句完成一个行为的,比如 if else 代码块.
  • 指针
    - 不能将内存地址与指针混为一谈.
    - 内存地址是内存中每个字节单元的唯一编号,而指针则一个实体.指针会分配内存空间, 相当于一个专门用来保存地址的整型变量.
    - 取址运算符 “&” , 用于获取对象地址.
    - 指针运算符"", 用于间接引用目标对象.
    - 二级指针 **T, 如包含包名则写成
    package.T
    - 指针运算符为左值时,我们可更新目标对象状态;而为右值时则是为了获取目标状态
package main

func main() {
    x := 10

    var p *int = &x     //获取地址, 保存到指针变量

    *p += 10            // 用指针间接引用, 并更新对象

    println(p, *p)        // 输出指针所存储的地址, 以及目标对象
}

输出结果:

0xc000031f70 20
	- 指针类型支持相等运算符, 但不能做加减法运算和类型转换.如果两个指针都指向同一个地址,或都为nil, 那么它们相等.
	- 指针 没有专门指向成员的 "->" 运算符, 统一使用"."选择表达式.
func main() {
    a := struct {
        x int
    } {}       // 可以理解为python的类, 类里有个属性x
               // todo: 后面又加了个{}, why?

    a.x = 100  // 可以理解为类属性的实例化

    p := &a   // 相当于python中类的继承, p继承了a的属性
    p.x += 10

    println(p.x)   // 输出110
}
	- 零长度(zero-size)对象的地址是否相等和具体的实现版本有关, 不过肯定不等于nil

func main() {
    var a, b struct{}
    println(&a, &b)
    println(&a == &b, a == b, &a == nil)
}

输出结果:(我的版本输出的结果就不一样,)

0xc000031f76 0xc000031f76
false true false

猜你喜欢

转载自blog.csdn.net/weixin_39791387/article/details/87642826