- 基本数据类型:变量存的是值,所以也叫值类型
- 获取变量的地址,用符号
&
package main
import "fmt"
func main() {
n := 100
fmt.Println("n的地址是", &n)
// n的地址是 0xc00000e098
}
上述代码内存示意图:
- 指针类型:指针变量存的是一个地址,这个地址指向的空间存的才是值
package main
import "fmt"
func main() {
n := 100
fmt.Println("n的地址是", &n)
// ptr是一个指针变量,指向int类型变量的地址
var ptr *int
ptr = &n
fmt.Println("ptr的值为", ptr)
// 指针变量也是变量,是变量就会有自己的地址
fmt.Println("ptr的地址是", &ptr)
}
/*结果:
n的地址是 0xc00000e098
ptr的值为 0xc00000e098
ptr的地址是 0xc000006030
*/
上述代码内存示意图:
- 获取指针类型所指向的值,用符号
*
package main
import "fmt"
func main() {
n := 100
var ptr *int
ptr = &n
// *ptr 等价于 *&n
// 功能是取[ptr的值(是一个地址)所指向内容]的值
fmt.Println(*ptr) // 100
fmt.Println(*&n) // 100
}
- 写一个程序,通过指针完成变量数据的间接修改
package main
import "fmt"
func main() {
n := 100
var ptr = &n
*ptr = 999
fmt.Println("n的值为", n)
// n的值为 999
}
值类型,都有对应的指针类型,形式为
*type
,比如int
对应的指针类型就是*int
,float32
对应的指针类型就是*float32
,以此类推。值类型在基本数据类型的基础上还包括数组和结构体。