Gox语言的指针类型及其操作-GX12

Gox语言中的指针类型,以及如何取地址/取引用或者解引用,看下面的例子代码就基本清楚了。

// 注:本代码例子中仅适用于Gox语言在使用Qlang-like引擎时

// b是用内置函数new新创建的一个string类型的指针
b = new(string)

printfln("b: %#v", b)

// 对于指针只能用setValue函数来给其对应的值赋新值
// 类似这样的操作:*b = "abb"是不允许的
setValue(b, "abb")

// 但是同其他语言类似,*可以用于将指针变量对应的值取出来
c = *b

println("c:", c)

// 也可以用内置函数getValue从指针中取值
d = getValue(b)

println("d:", d)

e = false

println("e:", e)

// Gox语言中是使用 ^ 来进行取地址/引用操作的
// 注意,因此^不能被用于异或操作
f = ^e

printfln("f: %#v", f)

printfln("hex value of f: %x", f)

// *f表示指针变量e指向的值
println("*f:", *f)

setValue(f, true)

println("*f:", e)

// e对应的值在使用了setValue后改变了
println("e:", e)

// 对于复合变量
a = []string{"first", "second", "3rd"} // &[]string{"aa", "bb"} 这种方式在Gox语言(Qlang引擎)中是不允许的,&不能用于取指针

println("a:", a)

// 但是可以用这种方式获得需要的指针
pa = ^a

printfln("pa: %#v", pa)


代码执行结果是:

b: (*string)(0xc0000c37e0)
c: abb
d: abb
e: false
f: (*interface {})(0xc000091760)
hex value of f: c000091760
*f: false
*f: true
e: true
a: [first second 3rd]
pa: (*interface {})(0xc000091780)

比较特殊的是,取地址符是^而不是一般的&,解地址时取值的话可以用*,但赋值时要用内置函数setValue。另外,新建变量时用内置函数new可以直接得到指针类型的变量。

猜你喜欢

转载自blog.csdn.net/weixin_41462458/article/details/107854169