[英]What brackets in array input mean
为什么在某些动态数组声明中,我们需要将数组名称放在方括号中:
(*allocMat)[count++] = row;
它与运算符优先级有关,即,语句的哪一部分先执行。
就像简单的数学一样。 是x = a + b*c
像x = (a + b)*c
或x = a + (b*c)
吗?
因此,对于您的代码,问题是: *
是否比[]
强[]
或相反?
考虑只做:
*allocMat[count++] = row;
您希望如何执行?
像一个:
(*allocMat)[count++] = row;
或像B:
*(allocMat[count++]) = row;
答案是它像B一样执行,因此,如果您真的想要A,则需要显式添加括号。
当allocMat
是指向数组的指针时,您需要A的示例。
当allocMat
是一个指针数组时,您想要B的示例。
这是因为运算符优先级 。 数组下标运算符[]
优先级高于一元解引用运算符*
。 因此,除非使用括号,否则类似
*allocMat[count++] = row;
将被解析为
* (allocMat[count++]) = row;
这是不希望的。
为了正确地评估该语句,我们需要首先取消引用指针,然后再对其进行索引,例如
(*allocMat)[count++] = row;
在上面的代码片段中, allocMat
是指向数组的指针。 因此,除非对较高的优先级强制取消引用,否则将首先考虑具有较高优先级的下标运算符[]
,这将导致错误的评估。
Allocmat大概是指向数组的指针。
需要括号才能正确获取间接地址。 因此(*allocMat)[count++]
与allocMat[0][count++]
。 如果您省略括号, *allocMat[count++]
将等于allocMat[count++][0]
,这是完全不同的。 这是因为运算符优先级- []
绑定比*
绑定更紧密。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.