结构体作为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。
多级指针
*就是解地址,&就是取地址。