44 lines
880 B
Go
44 lines
880 B
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
// 函数传指针,修改外部变量
|
|
func increment(x *int) {
|
|
*x++
|
|
}
|
|
|
|
// 指针作为返回值
|
|
func createInt() *int {
|
|
var num int = 100
|
|
return &num
|
|
}
|
|
|
|
func main() {
|
|
var x int = 20
|
|
var p *int = &x // p是指向x的指针
|
|
|
|
fmt.Printf("x的值: %d, x的地址: %p\n", x, &x)
|
|
fmt.Printf("p的值(地址): %p, p指向的值: %d\n", p, *p)
|
|
|
|
// 通过指针修改值
|
|
*p = 21
|
|
fmt.Printf("修改后x的值: %d\n", x) // 输出21
|
|
|
|
// 函数传指针
|
|
increment(&x)
|
|
fmt.Printf("increment后x值: %d\n", x) // 输出22
|
|
|
|
// 指针作为返回值
|
|
p2 := createInt()
|
|
fmt.Printf("createInt返回值: %d, 地址: %p\n", *p2, p2) // 输出100及地址
|
|
|
|
// 指针与nil比较
|
|
var p3 *int
|
|
if p3 == nil {
|
|
fmt.Println("p3是nil指针")
|
|
}
|
|
|
|
// 错误示例(编译不通过)
|
|
// p++ // 报错:invalid operation: p++ (non-numeric type *int)
|
|
}
|