go语言学习笔记7,结构体与map、函数参数,指针的定义和使用,指针和数组、切片、结构体,多级指针

结构体作为map中的value

在这里插入图片描述
我们使用make开辟了一个map的空间,并且int为键结构体的student为值。
我们创建了101和102并且给student赋值。
如果想要删除,就用delete方法删除m中的键。
在这里插入图片描述
这个value的类型是一个切片,一个键中的value可以有多个值可以用append方法添加值。

结构体作为函数参数

在这里插入图片描述
首先我们使用自定义类型创建了一个stu,然后作为函数参数传过去,在test中的方法中改变了名字,但是最后输出的结果中并没有改变,所以变量作为函数参数是值传递。
在这里插入图片描述
在这里插入图片描述
将结构体作为map中的value并且将map作为函数参数传递。如果我们要改变传过来的值,我们要先将map中键为102的值赋给stu,然后将stu的值改变,再将stu的值重新赋值给m中的键为102的值。这样就在test1方法中改变了map的值。

指针的定义和使用

在这里插入图片描述
var p *int = &a 就是定义一个指针变量存储变量的值。*p就是对a的值进行写的操作。

指针变量作为函数参数

在这里插入图片描述
在这里插入图片描述
&变量 取地址操作 引用运算符
*指针变量 取值操作 解引用运算符

p := &a 自动推导类型创建指针变量,就不用var了。
我们将a和b的地址传递过去,然后经过解地址交换a和b的值。就达到了交换的效果。

数组指针

在这里插入图片描述
定义一个指针指向数组就是数组指针。p := &arr 通过自动推导类型创建数组指针。也可以先用 var p *[10]int定义一个指针,然后指向数组。
将数组指针作为函数参数:
在这里插入图片描述
上面我们通过自动推导类型创建了一个数组指针,然后将数组指针作为函数参数传过去。最后的输出的结果是排好序的结果。
所以数组指针作为函数参数传递是地址传递。
在这里插入图片描述
我们可以根据(*p)[1]=222 对数组指针先解引用然后赋值,也可以不用,因为数组指针可以直接操作数组元素。

指针数组

在这里插入图片描述
数组指针是定义一个指针指向数组,而指针数组是数组的元素是指针。
在这里插入图片描述
这个就是二维数组的模型。我们定义了三个数组,然后再定义一个指针数组将a,b,c的地址放在指针数组中。这样就是一个二维数组的模型了。
在这里插入图片描述
同样我们操作的时候要用(*arr[1])[1]= 555的形式对数组赋值。注意要用括号

指针和切片

在这里插入图片描述
定义一个切片然后用自动推导类型让指针和切片建立关系。
在这里插入图片描述
切片的指针不能像数组那样不用加括号就可以,切片指针需要加上括号才可以。
在这里插入图片描述
切片指针作为函数参数。
test2不能改变s中的值,虽然传过去的值是一个地址,因为切片本身就是一个地址。如果用test2改变s中的值,我们还需要返回s的值。
如果不用返回值就能改变s的值,我们需要用切片指针作为函数参数。

结构体和指针

在这里插入图片描述
我们定义了一个per为person的结构体。然后p := &per定义指针接收结构体变量地址。
同样我们可以像数组一样,指针可以直接操作结构体成员。
在这里插入图片描述
结构体指针作为函数参数是地址传递,形参可以改变实参的值。
在这里插入图片描述
指向结构体数组的指针。
在这里插入图片描述
上面中我们定义了一个数组指针,然后创建内存空间存储[3]int。

多级指针

在这里插入图片描述
在这里插入图片描述
*就是解地址,&就是取地址。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值