1.new 函数动态分配空间返回地址
package main
import "fmt"
func main() {
//定义指向int类型的指针
var p *int
//创建一块内存存储int类型并返回其地址给p
p = new(int)
//修改指针指向那个的值
*p = 666
//num 把p指向的复制了一份,num的变换不会影响到p
num := *p
fmt.Println("num=", num)
//修改num的值
num = 777
fmt.Println("修改num后的p指向对象的值为:",*p)
fmt.Println("修改num后的num=", num)
}
运行结果:
num= 666
修改num后的p指向对象的值为: 666
修改num后的num= 777
2.值传递 和 地址传递
package main
import "fmt"
func main() {
a, b := 1, 2
//入参为变量类型,值传递
// 创建新的内存空间,存储int值,将值进行拷贝到新的内存中。对其修改,只是改变新内存里的int值,不影响main 里的a 和 b
changeByValue(a, b)
fmt.Printf("main函数内部:a=%d,b=%d\n", a, b)
//入参为指针类型,地址传递
//创建新的内存空间,存储int对象的地址,*p 操作将会影响到main里面的值
chageByAddr(&a, &b);
fmt.Printf("main函数内部:a=%d,b=%d\n", a, b)
}
func changeByValue(a, b int) () {
a, b = b, a
fmt.Printf("changeByValue函数内部:a=%d,b=%d\n", a, b)
}
func chageByAddr(a, b *int) () {
//地址交换。a 指向了main函数里的b变量 , b 指向了main函数里的a变量,不影响main里的变量
a, b = b, a
//指向的值进行互调,影响main里的变量
//*a, *b = *b, *a
fmt.Printf("chageByAddr函数内部:a=%d,b=%d\n", *a, *b)
}
初期的内存
运行结果:
changeByValue函数内部:a=2,b=1
main函数内部:a=1,b=2
chageByAddr函数内部:a=2,b=1
main函数内部:a=1,b=2
3.数组
3.1数组的初始化
package main
import "fmt"
func main() {
arr := [5]int{1, 2, 3, 4, 5}
fmt.Println("挨个的初始化,arr=", arr)
arr = [5]int{1, 2, 3}
fmt.Println("未初始化为默认值,arr=", arr)
//下标从0开始
arr = [5]int{1: 1, 2: 2}
fmt.Println("指定下标初始化,arr=", arr)
//多维数组
muliArr := [3][5]int{{1, 2,}, {2: 3, 3: 4}, {4: 5}}
fmt.Println("指定下标初始化多维数组muliArr=")
for i := 0; i < len(muliArr); i++ {
for j := 0; j < len(muliArr[i]); j++ {
fmt.Printf("%d ", muliArr[i][j])
}
fmt.Println("\n=========")
}
}
运行结果:
挨个的初始化,arr= [1 2 3 4 5]
未初始化为默认值,arr= [1 2 3 0 0]
指定下标初始化,arr= [0 1 2 0 0]
指定下标初始化多维数组muliArr=
1 2 0 0 0
=========
0 0 3 4 0
=========
0 0 0 0 5
=========
3.2数组的比较
同类型的数组之间可以判断== 和 !=
package main
import "fmt"
func main() {
//下标从0开始
arr := [5]int{1: 1, 2: 2}
arrB := [5]int{0, 1, 2, 0, 0}
fmt.Println("arr==arrB <===>", arr == arrB)
}
运行结果:
arr==arrB <===> true
不同类型的数组无法进行比较
package main
import "fmt"
func main() {
//下标从0开始
arr := [5]int{1: 1, 2: 2}
arrC := [5]float32{}
//这句代码会提示编译错误!!!
fmt.Println("arr==arrC <===>", arr == arrC)
}