代码地址 可以根据git log查看
指针
var a int =2 // 定义a,并赋值2
var pa *int = &a // pa 为指针,指向a的地址
*pa =3 // *pa代表这个地址内存的值,修改pa地址里的值为3 a会被改为3
fmt.prntln(a) //
- 指针不能运算
- 参数传递,go只能进行值传递,如果想实现引用传值,可以传指针,传指针的同时,修改指针指向的值
- 传递对象,一般对象内部使用指针,就可以直接传递对象,而不传递对象的指针, 在进行参数定义的时候,就要考虑,是要用指针还是值
// 例如这样的话,如果使用的是值,缓存肯定不能拷贝出来一份,所以需要在定义的时候就要考虑内部值为指针 后续细讲
var cache Cache
type Cache{
a *int
b *float
}
func (cache Cache)
// 用于两个变量值互换
a,b := 1,2
swap(&a,&b)
fmt.Println(a,b)
func swap(a,b *int) { // 传递a,b的指针
*a,*b = *b,*a // a指向的内容改为b指向的内容。。。
}
// 或者使用多返回值实现
a,b :=2,1
b,a = swap(a,b)
func swap(a,b int)(int,int){
return b,a
}
//*int 代表传入的参数为指针
func abc(a *int){
*a = *a+1
}
b:=2
abc(&b)
package main
import "fmt"
func main() {
var a int = 4
var b int32
var c float32
var ptr *int // 设置ptr为指针类型
/* 运算符实例 */
fmt.Printf("第 1 行 - a 变量类型为 = %T\n", a );
fmt.Printf("第 2 行 - b 变量类型为 = %T\n", b );
fmt.Printf("第 3 行 - c 变量类型为 = %T\n", c );
/* & 和 * 运算符实例 */
ptr = &a /* 'ptr' 包含了 'a' 变量的地址 */
fmt.Printf("a 的值为 %d\n", a);
fmt.Printf("*ptr 为 %d\n", *ptr); // *一个地址 根据地质取值
}
网友评论