golang有指针的指针或指针的参考功能?

时间:2014-07-08 15:24:16

标签: pointers go

嗨,Golang中的每个人如果你需要更改指针(改变指针所指向的位置而不是改变指针指向的值),你会怎么做?我知道在C ++中使用引用非常简单,比如"

void myFunc(Type*& ptr)
{
    ptr = anotherPointer;
}

int main
{
    Type* ptr = &someValue;
    myFunc(ptr); // ptr is moved
}

或等效地在C中,使用指针的指针:

void myFunc(Type** ptrsptr)
{
    *ptrsptr = anotherPointer;
}

int main
{
    Type* ptr = &someValue;
    myFunc(&ptr); // ptr is moved
}

我想知道Golang是否有这个简洁的功能,或者如果没有,唯一的方法是设置功能的返回?

2 个答案:

答案 0 :(得分:4)

您可以使用指向指针的指针,就像在C

中一样

http://play.golang.org/p/vE-3otpKkb

package main

import "fmt"

type Type struct{}

var anotherPointer = &Type{}

func myFunc(ptrsptr **Type) {
    *ptrsptr = anotherPointer
}

func main() {
    ptr := &Type{}
    fmt.Printf("%p\n", ptr)
    myFunc(&ptr) // ptr is moved
    fmt.Printf("%p\n", ptr)
}

答案 1 :(得分:0)

下面的例子只会改变变量的值:

package main

import "fmt"

func main() {

value := 200
var p1 *int = &value

var p2 **int = &p1

fmt.Printf("Value of variable before updating %v and address of pointer is: %p\n", *p1, p1)

*p1 = 300

fmt.Printf("Value of variable after updating by p1 %v and address of pointer is: %p\n", *p1, p1)

**p2 = 400
fmt.Printf("Value of variable after updating by p2 %v and address of pointer is: %p\n", *p1, p1)

}

下面的代码将改变指针值并指向新地址:

package main

import "fmt"

func changePointer(newP **int) {

  val := 500
  *newP = &val

}

func main() {

value := 200
var p1 *int = &value
fmt.Printf("Value of variable before updating %v and address of pointer is: %p\n", *p1, p1)

changePointer(&p1)

fmt.Printf("Value of variable after updating %v and address of pointer is: %p\n", *p1, p1)

 }