指针:存储另一个变量地址的变量
1.定义方式:var var_name *type:如var a *int
2.操作变量,并不会改变地址
3.通过指针改变数值:*p1=a
4.指向指针的指针:**int
数组指针:
1.首先是一个指针,一个数组的地址
指针数组:首先是一个数组,存储的数据类型是指针
函数指针和指针函数:
Go语言中,函数默认看作一个指针,没有*,slice,map,func
指针函数:一个函数,返回值是一个指针
package main
import "fmt"
func fun1() {
fmt.Println("sjskssks")
}
func main() {
/*
指针:存储另一个变量地址的变量
1.定义方式:var var_name *type:如var a *int
2.操作变量,并不会改变地址
3.通过指针改变数值:*p1=a
4.指向指针的指针:**int
数组指针:
1.首先是一个指针,一个数组的地址
指针数组:首先是一个数组,存储的数据类型是指针
函数指针和指针函数:
Go语言中,函数默认看作一个指针,没有*,slice,map,func
指针函数:一个函数,返回值是一个指针
*/
a := 10
var p1 *int
p1 = &a
*p1 = 50
var p2 **int
p2 = &p1
fmt.Println("a的数值是:", a)
fmt.Printf("%T\n", a)
fmt.Printf("a的地址是:%p\n", &a) //a的地址是:0xc000014098
fmt.Printf("p1: %v\n", &p1) // 0xc000006028
fmt.Printf("%d\n", *p1)
fmt.Printf("p2: %v\n", p2) //p1的地址,p2: 0xc000006028
fmt.Printf("p2: %v\n", *p2) //p1中存储的地址,即a的地址,p2: 0xc000014098
fmt.Printf("p2: %v\n", **p2)
//指针数组
arr1 := [4]int{1, 2, 3, 4}
var p3 *[4]int
p3 = &arr1
fmt.Printf("p3: %v\n", p3)
//根据数组指针操作数组
(*p3)[0] = 100 //(*p3)等同于arr1
fmt.Println(arr1)
p3[0] = 200 //简写
fmt.Printf("arr1: %v\n", arr1)
//指针数组
s := 1
b := 2
c := 3
d := 4
arr2 := [4]int{s, b, c, d}
arr3 := [4]*int{&s, &b, &c, &d}
fmt.Printf("arr3[1]: %v\n", *arr3[1]) //arr3[1]:b的地址,*arr3[1]:b的值
fmt.Printf("arr2: %v\n", arr2)
fmt.Printf("arr3: %v\n", arr3)
for i := 0; i < len(arr3); i++ {
fmt.Printf("%d\t", *arr3[i])
}
}
package main
import "fmt"
func main() {
/*
指针作为参数:
参数的传递:值传递,引用传递
*/
a := 10
fmt.Println("fun1调用前:a:", a)
fun1(a)
fmt.Println("fun1调用后:a:", a)
fmt.Println("")
fmt.Println("fun2调用前:a:", a)
fun2(&a)
fmt.Println("fun2调用后:a:", a)
arr := [4]int{1, 2, 3, 4}
fun3(arr)
fmt.Printf("arr: %v\n", arr)
fun4(&arr)
fmt.Printf("arr: %v\n", arr)
}
func fun1(num int) {
fmt.Println("fun1函数中,num的值:", num)
num = 100
fmt.Println("fun1函数中修改num的值:", num)
}
func fun2(num *int) {
fmt.Println("fun2函数中,num的值:", *num)
*num = 200
fmt.Println("fun2函数中num修改后:", *num)
}
func fun3(arr2 [4]int) {
fmt.Println("fun3函数中数组", arr2)
arr2[0] = 200
fmt.Println("函数中修改之后:", arr2)
}
func fun4(p1 *[4]int) {
fmt.Println("fun4函数中数组指针:", p1)//直接打印指针则显示数值
p1[0] = 200
fmt.Println("fun4修改之后:", p1)
}