我在创建指针时总是这样放置星号:
//directly adjacent to the type
int* p = new int();
所以我不会将声明与取消引用混淆。但后来我了解到:
//p is a pointer, q is an int
int* p, q;
这误导了我,所以我开始将星号放在变量旁边,而不是类型旁边。然而,这让我开始思考。他们为什么要这样设计?以这种方式思考它可能很糟糕,但我一直认为指针是类型的一部分。就像,它不是指向 int 的指针,它是一个 int 指针。我知道它实际上不是那样的,但它在我脑海中总是流动得更好。真正让我思考的是,为什么要加上括号:
//after the variable
int p[1];
tldr;为什么星号在变量前面,括号在后面
最佳答案
声明的 C 语法使用“向我们展示您将如何使用某物并告诉我们它是什么类型”的模型。
因此,如果 x
是一个 int
,我们从 x
开始,然后说它是一个 int
: int x;
.
如果 x
是指向 int
的指针,那么我们将使用 *x
来获取 int
,所以我们说 int *x;
。
如果 x
是一个返回 int
的函数,那么我们可以将它用作 x()
来获取 int
,所以我们说这是一个 int
:int x();
。
使用此模型的一个原因是它主要使用您已经为表达式构建的语法:声明的主体以与表达式相同的方式进行解析,然后您只需添加类型。如果您不使用相同的模型,那么您必须发明更多的语法来声明类型。
此模型使诸如 int *x, y;
的声明非常清楚:*x
和 y
的类型都是 int
。
关于c - [] 和 * 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21176221/