使用" sizeof" C中数组列的运算符

时间:2015-11-29 19:19:11

标签: c arrays

抱歉新手问题,我还在学习。

我们说matrix[x][y]

使用sizeof(matrix)将返回数组的整个大小。

使用sizeof(matrix[a])会返回某行的大小。

使用sizeof(matrix[a][b])将返回[a] [b]中的内容大小。

有没有办法找到一个列的大小?如果没有,为什么?我忽略了什么吗?谢谢你的时间。

编辑:感谢您的帮助,如果其他人正在寻找答案,那么用户" nnn"写了以下内容:

  

对于列中元素的数量:

sizeof(matrix) / sizeof(matrix[a])
     

对于列占用的字节大小:

sizeof(matrix) / sizeof(matrix[a]) * sizeof(matrix[a][b])

也是"风向标"解释sizeof的工作原理:

  

sizeof找到内存中连续字节使用的范围,所以它   不能直接用于查找每个使用的内存量   柱。数组,行或元素:是的。一栏:没有

3 个答案:

答案 0 :(得分:11)

对于列中元素的数量,将矩阵大小除以行大小

sizeof(matrix) / sizeof(matrix[a])   

对于列占用的字节大小(问题的实际答案),将元素数(前一个表达式)乘以元素大小

sizeof(matrix) / sizeof(matrix[a]) * sizeof(matrix[a][b])

即使使用单个sizeof运算符无法实现这一点,sizeof也会在编译时进行评估,通常编译器会将这些算术运算替换为实际结果,所以将不会由此引起运行时性能下降。

此外,上述表达式中ab的使用可以替换为0,即matrix[0]matrix[0][0],因为所有元素具有相同的大小。

答案 1 :(得分:0)

这是数学:

columnsize = sizeof(matrix) / sizeof(matrix[a])

答案 2 :(得分:0)

如果要查找列的大小,则必须计算:

(number of rows)*(size of an element)

所以对于matrix [x] [y]你必须写下这个:

int sizeOfArrayColumn = x*sizeof(matrix[0][0]);