gpt4 book ai didi

pointers - 为什么在 Go 中不能将整数添加到 "dereferenced"指针变量?

转载 作者:IT王子 更新时间:2023-10-29 01:38:02 25 4
gpt4 key购买 nike

来自 Python,我目前正在学习 Go 并尝试围绕指针进行思考。

我写这段代码是为了理解这个概念:

a := 1
b := &a
fmt.Println(b) // Shows the memory address of a
fmt.Println(*b) // Shows the value 1
*b++
fmt.Println(a) // Shows the value 2 (as expected)

我试着玩弄这段代码来加深我的理解。但是,以下内容不起作用:

a := 1
b := &a
fmt.Println(b) // Shows the memory address of a
fmt.Println(*b) // Shows the value 1
b = *b + 1 // Compile error: invalid operation: b * +1 (mismatched types *int and int)
fmt.Println(a)

显然,*b类型为 *int ,而值 1是(显然)类型 int .但是,为什么可以使用 *b++ 增加 a 的值?在第一个例子中?

最佳答案

从头开始:

b := &a

这里,b*int 类型的指针,指向内存中存储a 值的位置。当您执行 *b 时,您正在访问 b 指针指向的位置的值。

当您执行 *b++ 时,它代表 *b = *b + 1 并且您正在递增位置 b 上的值指针指向。

b = *b + 1 无效,因为您尝试添加 *b1,它们都是 的类型>int,指向b,是一个指针(*int的类型)。

关于pointers - 为什么在 Go 中不能将整数添加到 "dereferenced"指针变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52232886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com