目录
前言
正文
什么是指针?
指针怎么用?
前言
不止C++才有指针,Golang也有指针呦!二者有哪些区别呢?今天就来看一看。
正文
什么是指针?
指针是用来指向任何一个变量的内存地址的类型,它所指向的变量的内存地址在 32 和 64 位机器上分别占用 4 或 8 个字节,占用字节的大小与所指向的值的大小无关。
下面我们通过一个例子来了解一下指针是如何表示地址的。
实例代码:
package main
import (
"fmt"
)
func main() {
var a int = 1 // 一个整型变量a
var b string = "abcdefg" // 一个字符串变量b
fmt.Printf("%p %p", &a, &b) // 分别输出a和b的地址
}
运行结果:
0xc00007e020 0xc00005e1e0
值得注意的是,Golang中在声明变量时,是可以使用汉字的。比如,下面的编码形式也是可以编译通过并且正确运行的。
package main
import (
"fmt"
)
func main() {
var 一个整型变量 int = 1
var 一个字符串变量 string = "abcdefg"
fmt.Printf("%p %p", &一个整型变量, &一个字符串变量)
}
运行结果:
0xc000016060 0xc000010210
指针怎么用?
指针可以用来获取变量的地址,同时也可以用来获取变量对应的值。
下面我们通过一个例子,来了解Golang中的指针是如何获取变量地址以及它的值的。
实例代码:
package main
import (
"fmt"
)
func main() {
// 准备一个字符串类型
var a = "Hello, world"
// 获取字符串的地址, ptr类型为*string
ptr := &a
// 打印ptr的类型
fmt.Printf("ptr type: %T\n", ptr)
// 打印ptr的地址
fmt.Printf("address: %p\n", ptr)
// 对指针进行取值
value := *ptr
// 打印value的类型
fmt.Printf("value type: %T\n", value)
// 打印value的值
fmt.Printf("value: %s\n", value)
}
运行结果:
ptr type: *string
address: 0xc000010210
value type: string
value: Hello, world
通过代码的执行结果,我们可以知道ptr是一个string字符串类型的指针,它的地址是0xc000010210,它指向的值是 Hello, world。