Golang的单目(一元)运算符-地址操作符和接收操作符

       Golang的单目(一元)运算符-地址操作符和接收操作符

                                 作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

一.Golang的单目(一元)运算符概述

  常见的地址操作符:
    &:       取地址运算符,表示取一个变量的内存地址,它同时也属于一元操作符(也叫单目运算符)。
      举个例子:有一个变量N
ame := "yinzhengjie",使用"&Name"就获得一个十六进制的数字,该数字对应的就是Name变量的内存地址。            *:
      取值运算符,表示取一个变量所指向内存地址中保存的数据,它同时也属于一元操作符(也叫单目运算符)。
      该操作符我们在Go语言的面向对象操作时会有对应的操作,这里暂时有个印象即可。
  常见的接收操作符:     
<-:       接收操作符,即完成接收操作,它同时也属于一元操作符(也叫单目运算符)。       举个例子:"<- ch",如果ch代表了元素类型为byte的通道(channel)类型值,则此表达式就表示从ch中接收一个byte类型值的操作。       对该操作符使用比较感兴趣的小伙伴可以参考我关于channel相关的笔记。

  温馨提示:
    两个问题:
      如何区分"&"到底是位与逻辑运算符还是取地址运算符?
      如果区分"*"到底是乘法算数运算符还是取值运算符?
    问题剖析:
      其实很好区分,位与逻辑运算符和乘法算数运算符都需要两个变量(或等式)来参与运算,比如"a & b"和"a * b",它们需要变量a和b同时参与才能运算,我们称之二元运算符,也可以称为双目运算符。
      而取地址运算符和取值运算符只需要一个变量就能参与运算,比如"&a"和"*a",它们只需要一个变量就可以运算,我们称之为一元运算符,也可以称为一元运算符。
    Golang是否存在三目运算符呢?
      综上所述,你是否立即想起来Python和Java都支持三目运算符,那Go语言是否支持呢?其实Go语言官方并没有直接支持三目运算符相关的表达式,而是建议咱们使用if语句来代替,关于if语句是什么?我们在后面的章节接着聊。

 

二.地址操作符实战案例

package main

import (
    "fmt"
)

func main() {
    Name := "yinzhengjie"

    /*
        &:
            取地址运算符,表示取一个变量的内存地址,它同时也属于一元操作符(也叫单目运算符)。
    */
    fmt.Println(&Name)
    fmt.Printf("point的类型为[%T],Name变量的内存地址为[%x]\n", Name, &Name)
    fmt.Printf("point的类型为[%T],Name变量的内存地址为[%X]\n", Name, &Name)

    point := &Name //注意,point此时是一个指针变量哟~

    /*
        *:
            取值运算符,表示取一个变量所指向内存地址中保存的数据。
    */
    fmt.Printf("point的类型为[%T],point的值为[%s]\n", point, *point)
}

 

 

 

 

posted @ 2020-02-09 06:24  JasonYin2020  阅读(966)  评论(0编辑  收藏  举报