根据这个问题的回答
关于指针与接收器的值的规则是,可以在指针和值上调用值方法,但是只能在指针上调用指针方法
但实际上我可以对非指针值执行指针方法:
package main
import "fmt"
type car struct {
wheels int
}
func (c *car) fourWheels() {
c.wheels = 4
}
func main() {
var c = car{}
fmt.Println("Wheels:", c.wheels)
c.fourWheels()
// Here i can execute pointer method on non pointer value
fmt.Println("Wheels:", c.wheels)
}
那么,这是怎么了?这是新功能吗?还是对问题的回答是错误的?
您正在对指针值调用“指针方法”。在表达式中:
c.fourWheels()
c
是类型car
(非指针);由于该car.fourWheels()
方法具有指针接收者,并且由于接收者值是非指针且可寻址,因此它是以下各项的简写形式:
(&c).fourWheels()
这是在规范中:致电:
如果
x
是可寻址且&x
方法集包含m
,x.m()
则为的简写(&x).m()
。
该声明:
关于指针与接收器的值的规则是,可以在指针和值上调用值方法,但是只能在指针上调用指针方法
像这样解释它:
如果您有一个值方法,则可以 随时 调用它:如果您有值,则它随时可以成为接收方;如果您有一个指针,则可以随时对其取消引用以获得一个随时可以用作接收器的值。
如果您有一个指针方法,则只有一个值时 可能无法始终 调用它,因为存在多个无法寻址的表达式(其结果),因此您将无法获得指向该方法的指针。将用作接收器;这样的示例是函数返回值和映射索引表达式。
指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。 如果一个指针指向的是另外一个指针,我们就称它为 二级指针,或者 指向指针的指针。 假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示: 将这种关系转换为C语言代码: 指针变
6. 指向指针的指针与指针数组 指针可以指向基本类型,也可以指向复合类型,因此也可以指向另外一个指针变量,称为指向指针的指针。 int i; int *pi = &i; int **ppi = π 这样定义之后,表达式*ppi取pi的值,表达式**ppi取i的值。请读者自己画图理解i、pi、ppi这三个变量之间的关系。 很自然地,也可以定义指向“指向指针的指针”的指针,但是很少用到: int
问题内容: 我是Java菜鸟。我已经掌握了将C / C ++指针转换为Java引用的概念,并且进展相当顺利。 我打了一段有指针的代码(即* ptr)。我需要取消引用指针并更改其指向的指针的值(即 ptr =&newthing;) 在Java中这似乎要困难得多。是否有人对如何解决此问题有任何想法?快速谷歌搜索什么都没有。 这是C ++中的代码示例。我想在Java中获得类似的工作,但是ptr_to_p
本文向大家介绍什么是指向指针的指针? 相关面试题,主要包含被问及什么是指向指针的指针? 时的应答技巧和注意事项,需要的朋友参考一下 指针指向的变量是一个指针,即具体内容为一个指针的值,是一个地址. 此时指针指向的变量长度也是4位.
Go 指针 如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。 当定义一个指向指针的指针变量时,第一个指针存放第二个指针的地址,第二个指针存放变量的地址: Go 指针
指向指针的指针是多个间接或指针链的形式。 通常,指针包含变量的地址。 当我们定义指向指针的指针时,第一个指针包含第二个指针的地址,它指向包含实际值的位置,如下所示。 必须声明一个指向指针的指针的变量。 这是通过在其名称前面放置一个额外的星号来完成的。 例如,以下是声明指向int类型指针的指针的声明 - int **var; 当目标值由指针指向间接指向时,访问该值需要应用星号运算符两次,如下例所示