美文网首页
golang从入门到入土(四)指针

golang从入门到入土(四)指针

作者: mafa1993 | 来源:发表于2022-08-03 20:25 被阅读0次

    代码地址 可以根据git log查看

    指针

    var a int =2  // 定义a,并赋值2
    var pa *int = &a  // pa 为指针,指向a的地址
    *pa =3  // *pa代表这个地址内存的值,修改pa地址里的值为3  a会被改为3
    fmt.prntln(a)  // 
    
    1. 指针不能运算
    2. 参数传递,go只能进行值传递,如果想实现引用传值,可以传指针,传指针的同时,修改指针指向的值
    3. 传递对象,一般对象内部使用指针,就可以直接传递对象,而不传递对象的指针, 在进行参数定义的时候,就要考虑,是要用指针还是值
    // 例如这样的话,如果使用的是值,缓存肯定不能拷贝出来一份,所以需要在定义的时候就要考虑内部值为指针  后续细讲
    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);  // *一个地址 根据地质取值
    }
    

    相关文章

      网友评论

          本文标题:golang从入门到入土(四)指针

          本文链接:https://www.haomeiwen.com/subject/fgcuwrtx.html