零基础 go - 14(指针)

0 阅读1分钟

一、基本介绍

  • 基本数据类型:变量存的就是值,也叫做值类型。

  • 获取变量的地址,用 & 符号。例如 var n int = 10 fmt.Println(&n) 输出 n 的地址。

image.png

  • 指针类型:指针变量存储的是一个地址,这个地址指向的空间才是值。例如 var p *int = &n

image.png

  • 获取指针类型指向的值,使用 * 符号。例如 fmt.Println(*p) 输出 p 指向的值,也就是 n 的值。

二、指针的使用细节

  • 指针类型的零值是 nil,表示不指向任何地址。
  • 指针不能进行算术运算,但可以比较是否相等。
  • 指针可以指向任何类型的值,包括结构体、数组、函数等。(值类型都有对应的指针类型,形式为 *数据类型。例如 int 对应的是 *int, float64 对应的是 *float64)
  • 基本数据类型 int、float64、bool、string;复合数据类型 struct、array、slice、map、channel 等。
  • 值类型包括:int系列、float系列、bool、string、数组、结构体

三、代码示例

package main

import "fmt"

func main() {
    var n int = 10
    var p *int = &n
    fmt.Println("n的值为:", n) // 10
    fmt.Println("n的地址为:", &n) // n 的地址
    fmt.Println("p的值为:", p) // n 的地址
    fmt.Println("p指向的值为:", *p) // 10
    fmt.Printf("p的类型为:%T\n", p) // *int



    // 通过指针修改值
    *p = 20
    fmt.Println("修改后n的值为:", n) // 20
    fmt.Println("修改后p指向的值为:", *p) // 20




    // 指针的零值是 nil
    var q *int
    fmt.Println("q的值为:", q) // nil



    // 指针不能进行算术运算,但可以比较是否相等
    var r *int = &n
    fmt.Println("p和r是否相等:", p == r) // true




    // 值类型和指针类型要一一对应,不能混用
    var s int = 30
    var t *float64 = &s // 错误:cannot use &s (type *int) as type *float64 in assignment
}