c++中的int* x和int* x有区别吗?
Is there a difference between int *x and int* x in C++?
我正在重新开始我的c++学习,并真正试图了解基础知识。指针总是给我带来麻烦,我想确保在我继续前进并在道路上感到困惑之前我真的掌握了它。
可悲的是,我在一开始就被我正在阅读的教程中的不一致所阻碍。有些是这样声明指针的:
int *x
和一些这样做:
int* x
到目前为止,前者似乎是最常见的。这很令人沮丧,因为第二种说法对我来说更有意义。当我读到int *x时,我读到的是"这是一个int,它的名字是*x",这是不完全正确的。但是当我读第二段时,我看到"这是一个int指针,它的名字是x",这是相当准确的。
所以,在我建立我自己的心理地图之前,这两者之间有功能上的区别吗?如果我用第二种方法,我会成为一个被遗弃的麻风病人吗?
谢谢。
著名的Bjarne Stroustrup,以c++的创建和发展而闻名,他说…
在"int* p;"answers"int* p;"之间的选择与对与无关错了,是关于风格和重点。C强调表达;宣言常常被认为是一种必要的罪恶。另一方面,c++非常强调类型。
一个"典型的C程序员"会写"int *p;"并解释"*p是什么"是强调语法的int型,并且可能指向C(和c++)声明语法以证明风格的正确性。的确,语法中的*绑定到名称p。
一个"典型的c++程序员"会写"int* p;"并解释为"p是A"指向整型"强调"类型的指针。p的类型确实是int*。我很明显,我更喜欢这个强调,并且认为它对于使用c++的更高级的部分。
所以没有区别。这只是一个代码风格。
从这里
对于编译器来说,它们具有完全相同的含义。
从文体上来说,两者都有各自的优缺点。
第一个版本更可取,因为第二个版本:
int* x, y, z;
表示x
、y
、z
都是指针,而不是指针(只有x
是)。
第一个版本没有这个问题:
int *x, y, z;
换句话说,由于*
绑定到变量名而不是类型,因此将其放在变量名旁边是有意义的。
*
放在int
旁边是有意义的,因为它是类型的一部分。
无论您决定采用哪种思想流派,您都会在野外遇到两种风格,甚至更多(有些人写int * x
)。
没有区别。
这只是风格的问题。
我个人更喜欢这样:
int *x;
/,
int* x;
因为当在同一行声明多个变量时,后者可读性较差。例如:
int* x, y, z;
这里x
是指向int
的指针,但是y
和z
指针也是吗?看起来像它们是指针,但它们是而不是。
无差异。我使用int* x
的形式,因为我喜欢保持所有的类型组合在一起,远离名称,但这有点崩溃与更复杂的类型,如int (*x)[10]
。
有些人更喜欢int *x
,因为你可以把它读成"解引用x
得到int
"。但是,当您开始使用引用类型时,即使这样也会崩溃;int &x
并不意味着获取x
的地址就会得到int
。
您可能更喜欢int *x
的另一个原因是,就语法而言,int
是声明说明符序列,而*x
是声明符。它们是宣言的两个独立部分。当您有多个声明符(如int *x, y;
)时,这一点变得更加明显。在这种情况下,更容易看出y
不是指针。
然而,很多人,像我自己一样,不喜欢在一个声明中声明多个变量;在c++中不需要这么做。这可能是首选int* x
形式的另一个原因。
只有一个规则:保持一致。
绝对没有区别。
无差异。我倾向于选择
int* x
由于认为'x'具有int*类型,
对于编译器来说它们是相同的
但同时,当有多个变量
时,区别在于可读性int *x,y
但是这更容易误导人
int * x, y
两者是一回事。
虽然首选前者。假设你想声明两个指针p &Q在同一行
int* p, q;
这实际上意味着'p'是一个int型指针,而'q'是一个int型指针。
正确的语法是:
int* p, *q;
因此,在指针的名称中包含*。
这是一种编码风格。没什么区别,就像你自己说的,只是偏好的问题。希望你明白。
我认为,在表达式int * x,y;
中,x
和y
是变量的名称。当程序员像这样声明这些名称时,这意味着它们具有same type
和int *
类型。
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 为什么这里的大括号和括号初始化有区别?
- 使用短运算符的字符串连接有区别吗?
- static_cast<unsigned>(签名)与标准::bit_cast<unsigned>(签名)之间有区别吗?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 在类内和类外的定义处执行类转发声明是否有区别
- CRTP:为什么获得嵌套类型和派生类的嵌套方法有区别
- uniform_int_distribution <>和 <int>有什么区别?
- "long"和"long int"以及"long long"与"long long int"有什么区别
- "multiset<int, greater<int> > ms1"和"multiset<int> ms2(greater<int>())"有什么区别
- 新的int()和new int []有什么区别
- 忽略内存消耗,使用“int”或“char”是否有区别
- 开关情况下的字符和 int 有什么区别?
- int x{} 之间有区别吗?和整数 x = 0;
- int&a 和 int &a 之间有区别吗?
- int (*p) 和 int *p 之间有区别吗?
- void(int) 和 void(*)(int) 有什么区别?
- c++中的int* x和int* x有区别吗?
- int x[]和int *x有区别吗?