指针及运算符

指针

获取变量的地址,用&。

package main
import (
	"fmt"
	_"unsafe"
	_"strconv"
)

func main(){
	var num int64
	fmt.Println(&num)
}

指针类型:指针变量寸的是一个地址,这个地址指向的空间寸的才是值,比如:var ptr *int=&num

package main
import (
	"fmt"
	_"unsafe"
	_"strconv"
)

func main(){
	var i int=100
	var ptr *int=&i
	//ptr是一个指针变量
	//ptr的类型是*int
	//ptr本身的值是&i
	fmt.Printf("ptr=%v\n",ptr)
	//指针本身也有地址
	fmt.Printf("ptr的地址是%v\n",&ptr)
	//输出ptr指向的变量i的值
	fmt.Printf("ptr指向的值=%v",*ptr)
}

在这里插入图片描述

获取指针类型所指向的值,使用:*,比如:var ptr int,使用ptr获取ptr所指向的值。
利用指针修改变量的值

package main
import (
	"fmt"
	_"unsafe"
	_"strconv"
)

func main(){
	var i int=100
	var ptr *int=&i
	fmt.Println("改变前:i=",i)
	*ptr=121
	fmt.Println("改变后:i=",i)
}

指针细节说明:
1.值类型,都有对应的指针类型,形式为数据类型,比如int对应的指针就是int,以此类推。
2.值类型包括:基本数据类型 int系列,float系列,bool,string,数组和结构体struct。

值类型和引用类型

值类型: 基本数据类型 int系列,float系列,bool,string,数组和结构体struct。
变量直接存储值,内存通常在栈中分配。
引用类型: 指针、slice切片、map、管道chan、interface等都是引用类型。
变量存储的是一个地址,这个地址对应的空间才是真正存储数据(值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由GC来回收。

标识符的命名规范

在这里插入图片描述
在这里插入图片描述
驼峰法:前面小写,后面大写
在这里插入图片描述
3)golang中没有public、private等关键字。直接用首字母大小写判断公有还是私有。

如何引入一个包?
在这里插入图片描述
在这里插入图片描述
保留关键字
在这里插入图片描述
预定义标识符
在这里插入图片描述

运算符基本介绍

在这里插入图片描述
golang的自增自减只能当做一个独立语言使用,不能这样使用b:=a++或者b:=a–。
在这里插入图片描述
这里的i++,i–均使用错误,只能独立使用。

golang的++和–只能写在变量的后面,不能写在前面,只有a++,a–。

逻辑运算符
在这里插入图片描述
在这里插入图片描述
&&短路具体案例:

package main
import (
	"fmt"
)

func test() bool{
	fmt.Println("test...")
	return true
}

func main(){
	var i int =10
	if i<20&&test(){
	//i<20为true,所以没有短路,后面的test函数会执行,所以该程序输出结果是
	//test...
	//ok...
		fmt.Println("ok...")
	}
}

如果将程序改为:

package main
import (
	"fmt"
)

func test() bool{
	fmt.Println("test...")
	return true
}

func main(){
	var i int =10
	if i<9&&test(){
	//i<9为false,发生短路,test函数也不能执行,所以程序没有任何输出结果
		fmt.Println("ok...")
	}
}

|| 短路情况也可类推,这里就不赘述。

经典题:
不适用中间变量而交换a,b的值

a=a+b
b=a-b
a=a-b

运算符的优先级

在这里插入图片描述
位运算符
在这里插入图片描述
0^num=num

位运算
在这里插入图片描述
当有负数参与位运算的时候,过程就变得更加复杂了。因为负数的原码反码补码不一样。
要用补码进行运算。
在这里插入图片描述
golang中有两个移动运算符
在这里插入图片描述
在这里插入图片描述
移动符号后面的数字表示移动几位。

特别说明:
go语言不支持三目运算符(也称三元运算符)
只能用if,else来实现。
在这里插入图片描述

输入语句

在这里插入图片描述
方法一:fmt.Scanln
要用取值符才可以对变量的值进行改变。
在这里插入图片描述
方式二:fmt.Scanf,可以按指定的格式输入
在这里插入图片描述

进制

在这里插入图片描述

二进制转其他进制

二进制转八进制
规则:将二进制数从右往左每三位一组,高位不够三位就补上0,将每三位由二进制转十进制再转对应的八进制,拼起来就是八进制了。
在这里插入图片描述
二进制转十六进制
规则:将二进制数从右往左每三位一组,高位不够三位就补上0,将每三位由二进制转十进制再转对应的十六进制,拼起来就是十六进制了。
在这里插入图片描述

其他进制转二进制

八进制转二进制
在这里插入图片描述
十六进制转二进制
在这里插入图片描述

原码、反码、补码

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值