指针 & 地址
题目描述
定义变量
num = 88
- 打印变量值、变量内存地址
- 定义指针指向该变量
- 打印指针存的地址、解引用取值
输出示例
变量原值: 88
变量地址: 0x1400001a088
指针保存的地址: 0x1400001a088
指针解引用的值: 88
实现代码
Go
package main
import "fmt"
func main() {
num := 88
p := &num
fmt.Println("变量原值:", num)
fmt.Println("变量地址:", &num)
fmt.Println("指针保存的地址:", p)
fmt.Println("指针解引用的值:", *p)
}
通过指针修改变量
题目描述
用指针把
a := 20直接改成99,看原变量变化。
输出示例
修改前 a = 20
修改后 a = 99
实现代码
Go
package main
import "fmt"
func main() {
a := 20
fmt.Println("修改前 a =", a)
p := &a
*p = 99
fmt.Println("修改后 a =", a)
}
指针实现两数交换
题目描述
写
swap(a,b *int)不返回值,直接交换两个变量。
输出示例
交换前:x= 66 y= 99
交换后:x= 99 y= 66
实现代码
Go
package main
import "fmt"
func swap(a, b *int) {
t := *a
*a = *b
*b = t
}
func main() {
x, y := 66, 99
fmt.Println("交换前:x=",x," y=",y)
swap(&x, &y)
fmt.Println("交换后:x=",x," y=",y)
}
余额转账
题目描述
编写函数
transfer(from, to *int, money int)实现转账:初始化:A 账户初始余额 500,B 账户初始余额 200,转账金额固定为 150;
- from:转出账户指针,to:转入账户指针
- 余额 ≥ 转账金额,才扣款 + 入账
- 余额不足,不修改任何数据,提示转账失败
- 禁止出现负数余额
输出示例
转账前:A= 500 B= 200
转账成功
转账后:A= 350 B= 350
实现代码
Go
package main
import "fmt"
// 指针实现安全转账
func transfer(from, to *int, money int) {
if money <= 0 {
fmt.Println("转账金额必须大于0")
return
}
if *from >= money {
*from -= money
*to += money
fmt.Println("转账成功")
} else {
fmt.Println("余额不足,转账失败")
}
}
func main() {
accA := 500
accB := 200
fmt.Println("转账前:A=", accA, "B=", accB)
transfer(&accA, &accB, 150)
fmt.Println("转账后:A=", accA, "B=", accB)
}