非常常见的知识是声明指针的语义准确方法是
int *x;
而不是
int* x;
这是因为C将*x
视为int,而不是x
作为int指针。
这可以通过
轻松证明int* a, b;
其中a
是一个int指针,而b
是一个int。
stackoverflow.com上至少有5个重复的问题可以讨论这个问题。但是参考文献呢?
答案 0 :(得分:7)
Bjarne Stroustrup说:
typical C programmer
写int *p
;并解释它*p is what is the int
强调语法,并可能指向C(和C ++)声明语法来争论样式的正确性。实际上,*与语法中的名称p绑定。
typical C++ programmer
写int* p;
并解释p is a pointer to an int
强调类型。实际上,p的类型是int *。我显然更喜欢这种强调,并认为它对于使用C ++的更高级部分非常重要。
声明指针变量或参数时,可以将星号(或&符号)放在类型或变量名旁边。
最重要的是在一个文件中始终如一地执行此操作。
// These are fine, space preceding.
char *c;
const int &i;
// These are fine, space following.
char* c;
const int& i;
答案 1 :(得分:4)
在研究这个问题时,我已经找到了答案:
&
需要像*
一样编写。
演示代码类似于指针演示代码:
int main() {
int a = 0;
int b = 1;
int& ar = a, br = b;
br = 2;
return b;
}
这返回1,这意味着ar
是一个int引用,而br
只是一个整数。
答案 2 :(得分:4)
感谢“template typedefs”,你可以用(可以说)更好的方式声明多个引用:
template<typename T> using ref = T&;
int a, b;
ref<int> ar = a, br = b;