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

(*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的示例。

10-08 15:18