C 数组输入中的括号是什么意思
为什么在动态数组的某些声明中需要将数组名称放在括号中:C 数组输入中的括号是什么意思,c,arrays,syntax,C,Arrays,Syntax,为什么在动态数组的某些声明中需要将数组名称放在括号中: (*allocMat)[count++] = row; 这是因为。数组下标运算符[]的优先级高于一元解引用运算符*。因此,除非使用括号,否则 *allocMat[count++] = row; 将被解析为 * (allocMat[count++]) = row; 这是不可取的 为了正确地计算语句,我们需要首先取消对指针的引用,然后对其建立索引,如 (*allocMat)[count++] = row; 在上面的代码段中,allocM
(*allocMat)[count++] = row;
这是因为。数组下标运算符[]
的优先级高于一元解引用运算符*
。因此,除非使用括号,否则
*allocMat[count++] = row;
将被解析为
* (allocMat[count++]) = row;
这是不可取的
为了正确地计算语句,我们需要首先取消对指针的引用,然后对其建立索引,如
(*allocMat)[count++] = row;
在上面的代码段中,
allocMat
是指向数组的指针。因此,除非取消引用强制使用更高的优先级,否则将首先考虑具有更高优先级的订阅运算符[]
,这将导致错误的计算。Allocmat可能是指向数组的指针
需要使用括号才能正确获取间接寻址。因此,
(*allocMat)[count++]
与allocMat[0][count++]
相同。如果省略括号,*allocMat[count++]
将等于allocMat[count++][0]
,这是完全不同的。这是因为运算符优先级-[]
绑定比*
稍微紧一点,这是关于运算符优先级的问题,即先执行语句的哪一部分
就像简单的数学。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
是指向数组的指针时,您可能需要一个数组
例如,当
allocMat
是一个指针数组时,您需要B。什么是allocMat
?什么是allocMat
?我猜allocMat
是指向指针的指针,模拟按引用传递。然后,由于以下原因,需要使用括号。没有一个好的答案,很难说得更多。也请阅读,以及。