我对C++比较陌生(大约一年的经验,开关).我很好奇导致决定type * name
作为定义指针的语法的原因.在我看来,该语法应该是type & name
作为&
符号用于其他地方的代码来引用变量的内存地址.所以,要使用传统的int
指针示例:
int a = 1; int * b = &a;
会成为
int a = 1; int & b = &a
我确定有一些原因,我只是没有看到,我很想听到C++老手的一些意见.
谢谢,-S
C++采用C语法.正如" C语言的开发 "(作者Dennis Ritchie)所揭示的那样,C*
用于类型声明中的指针,因为决定使用类型语法.
对于[复合类型]的每个对象,已经有一种方法可以提及底层对象:索引数组,调用函数,
*
在指针上使用间接运算符[ ].类比推理导致了一个声明语法,用于反映名称通常出现的表达式语法的名称.从而,int i, *pi, **ppi;声明一个整数,一个指向整数的指针,一个指向整数指针的指针.这些声明的语法反映了在表达式中使用i,*pi和**ppi都会产生int类型的观察结果.
这是一个更复杂的例子:
int *(*foo)[4][];
此声明意味着表达*(*foo)[4][0]
具有类型int
,并从该(和[]
具有的优先级高于一元*
)可以解码的类型:foo是一个指针,指向指针型数组的大小为4的阵列.
C++中采用了这种语法,以便与C兼容.另外,不要忘记C++在声明中有用.
int & b = a;
上面的行表示引用另一个类型变量的引用变量int
.引用和指针之间的差别大致是引用只是初始化,并且您无法更改它们指向的位置,最后它们总是自动解除引用.
int x = 5, y = 10; int& r = x; int sum = r + y; // you do not need to say '*r' automatically dereferenced. r = y; // WRONG, 'r' can only have one thing pointing at during its life, only at its infancy ;)