package main
import "fmt"
func main() {
s := 20
fmt.Println(&s)
add1(s)
add2(&s)
}
func add1(a int) {
fmt.Println(&a,a)
}
func add2(a *int) {
fmt.Println(&a,a)
}
运行结果:
0xc00001e050
0xc00001e058 20
0xc00000e030 0xc00001e050
package main
import "fmt"
func main() {
s := 20
fmt.Println(&s)
add1(s)
add2(&s)
}
func add1(a int) {
fmt.Println(&a,a)
}
func add2(a *int) {
fmt.Println(&a,a)
}
运行结果:
0xc00001e050
0xc00001e058 20
0xc00000e030 0xc00001e050
没用过go语言,你学过C的话应该很容易理解
调用函数时参数要执行入栈操作,指针变量入栈只会占用4个字节(64位是8个字节)栈空间,而结构体入栈是通常会占用更多的栈空间(包括字节对齐等影响)
单从你的这两个函数来看,32位下使用栈内存是一样的(4个字节),64位下指针则会占用更多的栈内存