golang的指针不能像C中一样进行计算,例如获取数组的头指针,然后顺着头指针往下增加,依次获取数组的各个值。golang的指针不知道其自身的size,也就不能进行加减运算
package main
import "fmt"
func main () {
var name = "Lee"
// 同C语言,用 & 取地址
var p_name *string = &name
// *p_name 取值, 即p_name所指向的内容
*p_name = "Leee"
fmt.Println(name)
}
参数传递,值传递
package main
import "fmt"
func swap_val(a, b int){
b, a = a, b
}
func swap_val_res(a, b int) (int,int){
b, a = a, b
return a, b
}
func main () {
a, b := 1,2
fmt.Println(a, b)
swap_val(a, b)
fmt.Println(a, b)
a, b = swap_val_res(a, b)
fmt.Println(a, b)
}
运行结果
1 2
1 2
2 1
参数传递,引用传递
package main
import "fmt"
func swap_ref(a, b *int){
*b, *a = *a, *b
}
func main () {
a, b := 1,2
fmt.Println(a, b)
swap_ref(&a, &b)
fmt.Println(a, b)
}
结果
1 2
2 1
总结
- 何时使用指针传值
- 考虑要改变内容
- 结构过大的