小言_互联网的博客

golang学习系列——12. 指针

404人阅读  评论(0)

指针

程序在内存中存储信息,每个内存块(或字)有一个地址,通常用十六进制数表示,如: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 指针进行 * 操作, 会引发程序崩溃


转载:https://blog.csdn.net/night_crow/article/details/102490140
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场