我正在回到我的C ++研究中,并且真正试图理解基础知识。指针总是给我带来麻烦,我想确保在我继续操作之前就真的得到它并在路上感到困惑。
可悲的是,我一开始就被我正在阅读的教程中的不一致所困扰。有些人用这种方式做指针声明:int *x
有些人这样做:
int* x
现在两者的前者似乎是迄今为止最常见的。这令人沮丧,因为第二个对我来说更有意义。当我读int * x时,我读到“这是一个int,它的名字是* x”,这是不对的。但是当我读到第二个时,我看到“这里是一个int指针,它的名字是x”,这非常准确。
所以,在我构建自己的心智图之前,两者之间是否存在功能差异?如果我是第二种方式,我会成为麻风病人吗?
感谢。
答案 0 :(得分:15)
着名的Bjarne Stroustrup,以C ++的创建和开发而着称,说...
“int * p;”之间的选择和“int * p;”不是对的 错了,但关于风格和重点。 C强调表达; 声明通常被认为只是一种必要的邪恶。 另一方面,C ++非常重视类型。
“典型的C程序员”写“int * p;”并解释它“* p是什么 是int“强调语法,可能指向C(和C ++) 宣言语法争论风格的正确性。确实, *绑定到语法中的名称p。
“典型的C ++程序员”写“int * p;”并解释它“p是一个 指向int“强调类型的指针。确实p的类型是int * .I 显然更喜欢强调,并认为它对使用 更高级的C ++部分。
所以,没有区别。它只是一种代码风格。
来自here
答案 1 :(得分:10)
对于编译器,它们具有完全相同的含义。
在风格上,有支持和反对的论据。
一个论点是第一个版本更可取,因为第二个版本:
int* x, y, z;
表示x
,y
和z
都是指针,它们不是指针(只有x
)。
第一个版本没有这个问题:
int *x, y, z;
换句话说,由于*
绑定到变量名而不是类型,因此将它放在变量名旁边是有意义的。
反驳论证是不应该在同一声明中混合指针和非指针类型。如果不这样做,则上述参数不适用,将*
放在int
旁边是有意义的,因为它是类型的一部分。
无论你决定订阅哪种思想流派,你都会在野外遇到这两种风格,还有更多(有些人写int * x
)。
答案 2 :(得分:4)
完全没有区别。
这只是风格问题。
我个人更喜欢这个:
int *x;
这个,
int* x;
因为当您在同一行上声明许多变量时,后者的可读性较差。例如,请看:
int* x, y, z;
此处x
是指向int
的指针,但也是y
和z
指针? 看起来像它们是指针,但它们不是。
答案 3 :(得分:3)
没有区别。我使用int* x
表单是因为我更喜欢将所有类型组合在一起而不是名称,但是这种类型会因int (*x)[10]
等更复杂的类型而崩溃。
有些人更喜欢int *x
,因为您可以将其视为“取消引用x
为您提供int
”。但是当你开始使用引用类型时,即使这样也会分崩离析; int &x
并不意味着取x
的地址会给你一个int
。
您可能更喜欢int *x
的另一个原因是,就语法而言,int
是声明说明符序列,*x
是声明符。它们是宣言的两个独立部分。当你有多个声明符如int *x, y;
时,这就变得更加明显了。在这种情况下,可能更容易看到y
不是指针。
然而,像我一样,许多人不愿意在单个声明中声明多个变量;在C ++中没有太多需要。这可能是偏好int* x
形式的另一个原因。
只有一条规则:保持一致。
答案 4 :(得分:1)
绝对没有区别。
答案 5 :(得分:1)
没有区别。我倾向于选择
int* x
由于认为'x'的类型为int *。
答案 6 :(得分:1)
对于编译器,它们是相同的
但同时,当存在多个变量
时,差异是可读的int * x,y
然而,这更具误导性
int * x,y
答案 7 :(得分:0)
两者都是一回事。
前者虽然是首选。假设您要声明2个指针p& q在同一行。
int * p,q;
这实际上意味着'p'是指向int的指针,而'q'是int。
正确的语法是:
int * p,* q;
因此,我们在指针的名称中包含*。
答案 8 :(得分:0)
这是一种编码风格。没有什么区别,只是因为你自己说的偏好。希望你明白。享受编码
答案 9 :(得分:-2)
在我看来,表达式int * x,y;
x
和y
是变量的名称。当这些名称由程序员声明时,这意味着他们有same type
和int *
类型。