module mainfnmain() {unsafe { v :=4mut p :=&v// unsafe代码块中可以进行指针运算,编译器不负责检查 p++ p +=2 p = p -1println(p) p = p +1println(p) r := p++println(r)//多级指针 n :=100 pn :=&n ppn :=&pnmut pppn :=&ppnprintln(pppn) }}
fnmain() { a :=1println(isnil(&a)) // 返回false,变量只能通过:=来初始化,一定会有初始值 f := C.popen('ls', 'r') //调用C代码返回的指针,有可能是空指针ifisnil(&f) {// ...println('f is nil') } else {println('f is not nil') }}
也可以在代码中使用==或!=来判断指针是否是空值:
module mainstructPoint {pub: x int y int}fnmain() { p1 :=unsafe { nil } //初始化为空值nil,一定要在unsafe代码块中,或unsafe表达式 p2 :=&Point{1,2}if p1 ==unsafe { nil } { //判断是否为空值nilprintln('p1 is nil') }if p2!=unsafe { nil } { //判断是否不为空值nilprintln('p2 is not nil') }}