如何向alexa提交网站,重庆 手工 制作,成品网站nike源码免费,网站数据分析工具1. 前言
在我看来#xff0c;一门编程语言语法的核心就在于数据类型。而各类编程语言的基本数据类型大致相同#xff1a;int整型、float浮点型、string字符串类型、bool布尔类型#xff0c;但是在一些进阶数据类型上就有所不同了。本文将会介绍Go语言当中核心的数据类型——…1. 前言
在我看来一门编程语言语法的核心就在于数据类型。而各类编程语言的基本数据类型大致相同int整型、float浮点型、string字符串类型、bool布尔类型但是在一些进阶数据类型上就有所不同了。本文将会介绍Go语言当中核心的数据类型——指针这是我们学习后续进阶数据类型的基础
2. 指针
2.1 指针初识
相信大学学过C语言的同学们对这个概念一定不陌生指针就是数据在内存当中的地址很多同学都是“谈C色变”因为在C语言当中指针非常的灵活学习成本非常高。但是在Go语言当中指针类型只有两种操作取址 和 * 取值下面就通过一段代码来引入指针
var x 100
// 取址符 取值符:*
fmt.Println(x的地址, x)
// 将地址值赋值给的变量称为指针变量
var p *int
p x
fmt.Println(p的值, p)
fmt.Println(p地址对应的值, *p)这是我的编译器运行结果上述代码做的事情就是定义了一个变量x然后使用取址操作符将地址赋值给变量p由于该变量存储的是地址因此也被称为指针变量最后打印了p的值以及使用 *取值操作取出了p指向的地址空间中存储的值下面就通过图解的方式观察其过程 变量p存储的并不是一个像int之类的简单数据类型而是一个地址值因此p也被称为指向整型的指针变量因此x以及p的值都是0xc000012070使用 *p 操作取值就会通过该地址找到实际存储的值100
2.2 指针练习题
2.2.1 练习题1
// 当使用等号将一个变量的值赋给另一个变量时如 x y ,实际上是在内存中将 i 的值进行了拷贝
var x 10
var y x
var z x
x 20
fmt.Println(y)
fmt.Println(*z)
*z 30
fmt.Println(x)运行结果如下图所示 画个图就明白了 解析执行代码y x的过程本质就是发生了值拷贝分配了一块新的内容空间填充值为10并赋值给y然后执行代码z x将x的地址0x11赋值给了变量p如图所示然后执行代码x 20特别需要注意的是y此时并不会被修改此时打印y的值仍是10执行代码*z 30借助地址修改的0x11空间的20为30因此打印x的值为30但是在整个过程中y开辟一块独立空间是不会被修改的
2.2.2 练习题2
var x 10
var y x
var z *y
x 20
fmt.Println(x)
fmt.Println(*y)
fmt.Println(z) 运行结果如下图所示 如果错了的话一定要自己画图 解析执行代码y x将x的地址0x11赋值给了变量y然后执行代码z *y特别需要注意的是*y得到的值就是整数10因此开辟一块新的内存空间存储值10然后赋值给变量zz并不是指针变量执行代码x 20将0x11地址空间值10改为20因此打印x的值为20*y根据地址0x11找到对应存储的值为修改过后的20但是z的值仍为10不会被更改
2.2.3 练习题3
var a 100
var b a
var c b
**c 200
fmt.Println(a)运行结果如下图所示 这个题应该不难做对关键是要理解每行代码的底层执行流程 解析本题实际上就是二级指针的运用执行代码b a将a的地址0x11赋值给了变量bc b就是将b的空间地址0x22赋值给了c*c取到的值就是0x22**c操作取到的值就是a地址空间存储的100了修改为200之后a取值也即为200了
2.3 new函数
在学习一个新的知识点的时候我们需要理解为什么要引入它没有这个知识行不行下面我们来看两段代码的区别
代码段1
var x int
x 10代码段2
var p *int
*p 10事实上代码段2是会报错的因为*int为指针类型区别于以往学到的基本数据类型基本数据类型声明未赋值时会默认零值但是指针类型默认为nil不会分配对应的存储空间。之前我们都是通过先定义var x 10; var p x的方式使用指针但是现在我想直接声明使用指针应该怎么做呢这就要使用到new函数了语法如下
var p new(int)
*p 10此时new函数底层就会帮助我们初始化一块内存空间并将对应的地址返回
2.4 指针小结
回顾下我们学到的知识
指针在Go语言中可以理解为数据在内存中的地址Go语言中的指针没有C语言中偏移、运算等功能只有取址操作符和*取值操作符保证访问高效的同时也保障了内存数据安全new函数的作用就是开辟内存空间并将地址返回