指针
获取变量的地址,用&。
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,将每三位由二进制转十进制再转对应的十六进制,拼起来就是十六进制了。
其他进制转二进制
八进制转二进制
十六进制转二进制
原码、反码、补码