为什么指针类型的表示法以星号开头?

Geo*_*rgy -1 c pointers go

将指针传递给函数我经常会感到困惑。如果我们创建一个整数值变量,例如var a int(在 Go 中是0)获取其地址(指向它的指针),我们将使用与符号pA := &a。为了获取指针后面的值,我们使用星号表示法b := *pA。有道理,没问题。但为什么该语言的创建者(不仅是 Go)选择了指针类型的表示法来代替*int&intfunc test(i *int) {}接受整数的地址作为参数)。*用来获取值,&获取地址。*int对我来说就像int 的值&int该语言中并不真正存在)读起来就像int 的地址

这是一个关于指针类型表示法背后的历史的问题,为什么它是星号而不是&符号,其背后的逻辑是什么?

Sha*_*awn 5

来自 DMR 的《C 语言的发展》:

对于这种组合类型的每个对象,已经有一种方法来提及底层对象:索引数组、调用函数、在指针上使用间接运算符。类比推理导致名称的声明语法反映了名称通常出现的表达式语法的语法。因此,

int i, *pi, **ppi;
Run Code Online (Sandbox Code Playgroud)

声明一个整数、一个指向整数的指针、一个指向整数指针的指针。这些声明的语法反映了以下观察结果i: 、*pi**ppiall 在表达式中使用时会产生 int 类型。

因此,他们使用星号来声明指针变量,因为星号用于取消引用所述指针(来自早期的 B 语言)。