C 仅计算二维数组中的第一维元素?

C 仅计算二维数组中的第一维元素?,c,multidimensional-array,C,Multidimensional Array,我有一个二维数组,它存储坐标(xy)int-arr[3][3]。如何仅对阵列中的一个维度进行计算 如果我对x坐标的平均值感兴趣,我会键入: float sumX=(float)arr[0]+arr[1]+arr[3]/3.0f 当我这样做时,我得到了错误从类型“int*”到类型“float”的无效转换。。我怎么能不被允许这样做 假设每行只有第一个元素包含x坐标,您应该这样做- float sumX = (arr[0][0] + arr[1][0] + arr[2][0]) / 3.0f; ar

我有一个二维数组,它存储坐标(xy)
int-arr[3][3]
。如何仅对阵列中的一个维度进行计算

如果我对x坐标的平均值感兴趣,我会键入:

float sumX=(float)arr[0]+arr[1]+arr[3]/3.0f


当我这样做时,我得到了错误
从类型“int*”到类型“float”的无效转换。
。我怎么能不被允许这样做

假设每行只有第一个元素包含x坐标,您应该这样做-

float sumX = (arr[0][0] + arr[1][0] + arr[2][0]) / 3.0f;
arr[0][0]
提供存储在数组第一行第一个元素中的值,
arr[1][0]
提供存储在数组第二行第一个元素中的值,依此类推。根据需要更改上述表达式。

尝试:

float sumX = (float) (arr[0][0] + arr[1][0] + arr[2][0]) / 3.0f;

您需要用括号对操作的内容进行分组,并且需要指定一个值而不是一行。

在这种情况下,将返回地址

float sumX = (float) arr[0] + arr[1] + arr[3] / 3.0f;
要返回该值,请使用间接运算符

float sumX = (float) ( *arr[0] + *arr[1] + *arr[3] )/ 3.0f;

它应该是
arr[0][0]+arr[0][1]+..
而且您为总和写下的表达式是错误的。你的
(float)
只适用于第一个项,你应该对求和有偏执。请注意,arr[3]超出了你的数组边界。是否需要强制转换?在我的专业环境中,我们试图避免隐式强制转换,原因有两个:1)清晰性如果有显式强制转换,那么毫无疑问你在看什么&2)MISRA规则反对它,因为一些隐式强制转换可能会导致问题,所以如果你没有……但是在键入时
arr[0][0]+arr[1][0]…
它将计算x+y。我只想计算x而忽略y。因为arr是int[3][3]类型,arr[0]是int[3]类型,但是arr[0][0]是int类型,并且是第一行的第一个元素。我和其他人假设第二个3代表[x,y,z],如果不是,你需要澄清你的数据是如何组织的。您可能需要使用[0][0]、[0][1]、[0][2]。@user3005287我认为您需要重新考虑您试图在这里实现的目标。您将讨论二维数组和x和y坐标。阵列的二维性与二维平面中的二维x和y无关。在数组中,第一个维度是点或行索引,第二个维度是坐标索引,即0表示x,1表示y。在你的例子中没有z,所以2是未使用的。括号是必需的!其中括号需要地址arr[3]的1/3加上地址arr[1]的1/3,以此类推。