GO的点滴基本语法

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)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值