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