golang学习系列——12. 指针

指针

程序在内存中存储信息,每个内存块(或字)有一个地址,通常用十六进制数表示,如:0x6b0820 或 0xf84001d7f0。

这个地址可以存储在一个叫做指针的特殊数据类型中,一个指针变量可以指向任何一个值的内存地址

在 32 位机器上占用 4 个字节,在 64 位机器上占用 8 个字节,并且与它所指向的值的大小无关。

当一个指针的零值为 nil。

指针运算符

&:放到一个变量前使用就会返回相应变量的内存地址。

*:放到一个指针前使用就会返回相应内存地址的变量值。 这被称为反引用(或者内容或者间接引用)

可以如下所示用 *p 赋值来改变 s 本身的值

func main() {
    s := "good bye"
    var p *string = &s
    *p = "hello world"
    fmt.Printf("Here is the string *p: %s\n", *p) // prints string
    fmt.Printf("Here is the string s: %s\n", s) // prints same string
}

区别

Go 语言和 C、C++ 以及 D 语言这些低级(系统)语言一样,都有指针的概念。

但是对于经常导致 C 语言内存泄漏继而程序崩溃的指针运算(所谓的指针算法,如:pointer+2,移动指针指向字符串的字节数或数组的某个位置)是不被允许的。

Go 语言中的指针保证了内存安全,更像是 Java、C# 和 VB.NET 中的引用。

注意事项

写 var p *type 不要写  var p*type, 后者语法正确但是容易被误认为是一个乘法表达式

不能得到一个文字或常量的地址

不可以对 nil 指针进行 * 操作, 会引发程序崩溃

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值