数组输入中的括号是什么意思

时间:2018-11-08 06:53:03

标签: c arrays syntax

为什么在某些动态数组声明中,我们需要将数组名称放在方括号中:

(*allocMat)[count++] = row;

3 个答案:

答案 0 :(得分:1)

这与运算符的优先级有关,即该语句的哪一部分先执行。

就像简单的数学一样。是像x = a + b*cx = (a + b)*c一样执行x = a + (b*c)吗?

因此对于您的代码,问题是:*[]“强”还是相反?

考虑一下:

*allocMat[count++] = row;

您希望如何执行?

像A:

(*allocMat)[count++] = row;

或类似B:

*(allocMat[count++]) = row;

答案是它像B一样执行,因此,如果您真的想要A,则需要显式添加括号。

allocMat是指向数组的指针时,您想要A的示例。

allocMat是一个指针数组时,您想要B的示例。

答案 1 :(得分:0)

这是因为operator precedence。数组下标运算符[]的优先级高于一元解引用运算符*。因此,除非使用括号,否则类似

的语句
*allocMat[count++] = row;

将被解析为

* (allocMat[count++]) = row;

这是不希望的。

要正确评估该语句,我们需要首先取消引用该指针,然后像其上那样对它建立索引

(*allocMat)[count++] = row;

在上面的代码段中,allocMat是指向数组的指针。因此,除非取消引用的优先级较高,否则将优先考虑具有较高优先级的下标运算符[],这将导致错误的评估。

答案 2 :(得分:0)

Allocmat大概是指向数组的指针。

需要括号才能正确获取间接地址。因此(*allocMat)[count++]allocMat[0][count++]相同。如果您省略括号,*allocMat[count++]将等于allocMat[count++][0],这是完全不同的。这是因为运算符优先级-[]的绑定比*的绑定稍微紧密。