Go语言基础 指针 运算符

指针及其内存布局

基本介绍

  1. 基本数据类型,变量存的就是值 也叫值类型
  2. 获取变量的地址 用& 比如 var num int 获取num的地址:&num
  3. 指针的类型 指针变量存的是一个地址 这个地址指向的空间存的才是值 比如 var ptr*int=&num
  4. 获取指针类型锁指向的值 使用:* 比如 var ptr*int 使用 *ptr 获取ptr 指向的值
  5. 举例
    在这里插入图片描述

指针的使用细节

1,值类型 都有对应的指针类型 形式为 数据类型 比如int 的对应的指针 就是 *int float32 对应的指针类型就是 *float32 依次类推
2,值类型包括 基本数据类型 int 系列 float系列 bool String 数组和 结构体

值类型和引用类型

1,值类型 基本数据类型 int 系列 float 系列 bool String 数组和结构体
2,引用类型 指针 slice 切片 map 管道 chan interface 等都是引用类型

值类型和引用类型使用特点

1,值类型:变量直接存储值 内存通常在栈中分配
在这里插入图片描述

2 引用类型 变量存储的是一个地址 这个地址对应的空间才是真正存储的数据(值)内存通常在堆上分配 当没有任何变量引用这个地址时 该地址对应的数据空间就成为一个垃圾由GC 来回收

在这里插入图片描述

标识符的命名规范(重点)标识符概念

  1. Golang对各种变量、方法等命名时使用的字符序列称为标识符2)凡是自己可以起名字的地方都叫标识符
    |标识符的命名规则
    占1)由26个英文字母大小写,0-9 ,组成

    2)数字不可以开头。
    3)Golang中严格区分大小写。4)标识符不能包含空格。
    5)下划线"
    "本身在Go中是一个特殊的标识符,称为空标识符。可以代表任何其它的标识
    符,但是它对应的值会被忽略(比如:忽略某个返回值)。所以仅能被作为占位符使用,不能作为标识符使用。
    6)不能以系统保留关键字作为标识符,比如 break,if 等等…

系统保留字

在这里插入图片描述

标识符的命名规范

标识符命名注意事项

1)包名:保持package的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,
不要和标准库不要冲突
2)变量名、函数名、常量名:采用驼峰法。
3)如果变量名、函数名、常量名首字母大写,则可以被其他的包访问;如果首字母小写,
则只能在本包中使用(注:可以简单的理解成,首字母大写是公有的,首字母小写是私有的)

预定义标识符

在这里插入图片描述

运算符介绍

运算符是一种特殊的符号 用来标识数据的运算,赋值,和比较

算术运算符

算术运算符是对 数值类型的变量 进行运算的 比如:加减乘除
在这里插入图片描述

func main() {
	// 运算符 / 的用法 如果两个数 都是整数的话 结果就是只保留整数部分
	fmt.Println(10 / 4)
	// 如果希望保留小数部分 则需要有浮点数参与运算
	fmt.Println(10.0 / 4)
}

C:\Users\86152\AppData\Local\Temp\GoLand\___go_build_gopl_Stringtest.exe
2
2.5
······························································································
func main() {
	// 演示 % 使用
	// a%b = a-a /b*b
	fmt.Println(10 / 3)
	fmt.Println(-10 % 3) //-10 -(-10)/3*3  = -10 -(-9) =-1
}
C:\Users\86152\AppData\Local\Temp\GoLand\___go_build_gopl_Stringtest.exe
3
-1
······························································································

func main() {
	// ++ 和 -- 的使用
	var i int = 10
	i++ //i= i+1
	fmt.Println(i)
	i-- //i=i-1
	fmt.Println(i)
}
C:\Users\86152\AppData\Local\Temp\GoLand\___go_build_gopl_Stringtest.exe
11
10

算术运算符的使用细节

1)对于除号"/",它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。例如: x= 19/5 ,结果是3
2)当对一个数取模时,可以等价 a%b=a-a/b*b,这样我们可以看到取模的一个本质运算。3)Golang的自增自减只能当做一个独立语言使用时,不能这样使用
b := a+或者b:= a–
4) Golang的++和–只能写在变量的后面,不能写在变量的前面,即:只有 at+ a–没有++a–a
5) Golang的设计者去掉c / java中的自增自减的容易混淆的写法,让Golang更加简洁,统一。(强制性的)

关系运算符

1,关系运算符的结果都是 bool 型 也就是要么是 true 要么是false
2, 关系表达式 经常用在 if 结构的条件中 或循环结构的条件中
在这里插入图片描述

关系运算符使用细节

1,关系运算符 的结果都是 bool 型 也就是要么是true 要么是false
2,关系运算符组成的表达式 我们称为关系表达式 a>b
3, 比较运算符 “==” 不能误写成“=” !!

逻辑运算符

在这里插入图片描述

func main() {
	//&& 的使用
	age := 41
	if age >= 30 && age <= 40 {
		fmt.Println("age= ", age)
	}
	if age >= 40 && age <= 50 {
		fmt.Println("age1= ", age)
	}
}
C:\Users\86152\AppData\Local\Temp\GoLand\___1go_build_gopl_Stringtest.exe
age1=  41

// || 的操作
func main() {
	//&& 的使用
	age := 41
	if age >= 42 || age <= 40 {
		fmt.Println("age= ", age)
	} else {
		fmt.Println("aaaa")
	}
}
C:\Users\86152\AppData\Local\Temp\GoLand\___1go_build_gopl_Stringtest.exe
aaaa

// ! 的使用
func main() {
	// ! 的使用
	age := 41
	if !(age <= 40) {
		fmt.Println("aaaaaa")
	}
}
C:\Users\86152\AppData\Local\Temp\GoLand\___1go_build_gopl_Stringtest.exe
aaaaaa



逻辑运算符的细节

1,&& 也叫短路与 如果第一个条件为false 则第二个条件不会判断 最终结果为 false
2,|| 也叫短路或 如果第一个条件为true 则第二个条件不会判断 最终结果为true

赋值运算符

赋值运算符就是将某个运算后的值 赋值给指定的变量
在这里插入图片描述

赋值运算符的特点

1,运算顺序从右往左
2,赋值运算符的左边 只能是变量 右边 可以是变量 表达式 常量值
3,复合赋值运算符等价于下面的效果

运算符的优先级

在这里插入图片描述

位运算符

在这里插入图片描述

其他运算符

在这里插入图片描述

func main() {
	// $ 和 * 的使用
	a := 100
	fmt.Println("a 的地址=", &a)

	var ptr *int = &a
	fmt.Println(*ptr)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值