其他分享
首页 > 其他分享> > C运算符“*”是左关联的还是右关联的?

C运算符“*”是左关联的还是右关联的?

作者:互联网

我有一个测试程序试试这个:

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;
}

(1)我发现q不是指针,所以似乎int * p星号是右关联的.

(2)但是对于int * buf [20],我发现buf是一个包含20个元素的数组,每个元素都用int *键入.所以在第5行中,星号似乎是左关联的.

那么,如何*与表达式的其他部分相关联,左关联或右关联,还是应用于其他规则的确切规则是什么?

解决方法:

声明由一系列说明符组成,后跟一系列声明符.每个声明者声明一个名称.每个说明符独立地适用于每个声明符.因此在

int* p, q;

说明符int适用于p和q.但是,*不是说明符,而是声明符* p的一部分,因此它仅适用于p.

*绑定到其右侧的实体,但它的优先级低于[]和().此优先级规则与表达式的规则相同. &安培;和&& (仅限C)具有与*相同的优先级.在

int* buf[20];

有一个说明符,int和一个声明符,* buf [20],[20]绑定得更紧,所以它是一个指针数组,不是指向数组的指针,基类型是int,所以它是一个指向int的指针数组.

可以通过括号更改绑定:

int* buf[20]; // array of pointers
int (*buf)[20]; // pointer to array

标签:associative,c
来源: https://codeday.me/bug/20190722/1502662.html