我有一个测试程序试试这个:
int main()
{
int i = 1;
int* p, q;
p = &i;
//q = &i;//q is not pointer
int* buf[20];//type of element is int*
return 0;
}
Run Code Online (Sandbox Code Playgroud)
(1)我发现q不是指针,所以int *p星号似乎是右关联的.
(2)但是,因为int* buf[20],我发现buf了一个由20个元素组成的数组,每个元素都用int*.所以在第5行中,星号似乎是左关联的.
那么,如何*与表达式的其他部分相关联,左关联或右关联,或应用于其他规则的确切规则是什么?
声明由一系列说明符组成,后跟一系列声明符.每个声明者声明一个名称.每个说明符独立地适用于每个声明符.因此在
int* p, q;
Run Code Online (Sandbox Code Playgroud)
说明符int适用于p和q.但是,*它不是说明符,而是声明符的一部分*p,因此它只适用于p.
*绑定到其右侧的实体,但它的优先级低于[]和().此优先级规则与表达式的规则相同.&和&&(仅限C++)具有相同的优先级*.在
int* buf[20];
Run Code Online (Sandbox Code Playgroud)
有一个指定器,int和一个说明符,*buf[20]以及[20]结合更紧密,所以它是一个指针数组,而不是一个指针阵列,并且基类型是int,所以它的指针的阵列int.
可以通过括号更改绑定:
int* buf[20]; // array of pointers
int (*buf)[20]; // pointer to array
Run Code Online (Sandbox Code Playgroud)