c++ - C++ 运算符 "*"是左关联还是右关联?

标签 c++ associative

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

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 适用于 pq。但是,* 不是说明符,而是声明符 *p 的一部分,因此它仅适用于 p

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

int* buf[20];

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

绑定(bind)可以通过括号改变:

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

关于c++ - C++ 运算符 "*"是左关联还是右关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38176168/

相关文章:

c++ - 通过函数传递指针然后变得乱码

php - 在php中创建二维矩阵

c - C 中的表达式求值

c++ - 从通过 std::async 启动的函数抛出的异常会发生什么

php - 预置到多维关联数组

php - 循环遍历数组数据

PHP多维数组(usort)

c++ - 是否可以在内存分配之前复制动态分配的数组指针?

c++ - 存储双指针地址并检索其值

c++ - 结构数组的内存分配错误