Go 语言里面的指针和 C++ 指针一样,都是指向某块内存的地址值,可以解引用,不同只是在于 C++ 里可以直接对指针做算术运算(+、-、++、--)而 Go 里面不行。
差别真的仅限于此,而且 Go 还提供了一些底层的库 reflect 和 unsafe,它们可以让使用者把任意一个 Go 指针转成 uintptr 类型的值,然后再像 C++ 一样对指针做算术运算,最后再还原成 Go 类型。所以从这个角度上来说,Go 的指针也是可以和 C++ 指针一样使用的,只是会比较绕,这同时也要求使用者自己明白,如果真要把指针这么用,那么请记得后果自负。
发布评论
评论(3)
Go 语言里面的指针和 C++ 指针一样,都是指向某块内存的地址值,可以解引用,不同只是在于 C++ 里可以直接对指针做算术运算(+、-、++、--)而 Go 里面不行。
差别真的仅限于此,而且 Go 还提供了一些底层的库
reflect
和unsafe
,它们可以让使用者把任意一个 Go 指针转成uintptr
类型的值,然后再像 C++ 一样对指针做算术运算,最后再还原成 Go 类型。所以从这个角度上来说,Go 的指针也是可以和 C++ 指针一样使用的,只是会比较绕,这同时也要求使用者自己明白,如果真要把指针这么用,那么请记得后果自负。下面就是一个在 Go 里面直接操作内存指针的例子:
http://play.golang.org/p/z_GMnh38Z1 (需翻墙)
不知道你熟悉C#语言里面的ref关键字吗?意思就是按引用传递。
仅此而已,既不能做指针运算,也不能解引用。
其实是一样的,
Go
只是做了一些封装,用起来相对比较好理解