假设我有一个全局声明的3d数组(在数据段中),我想将其1d memset为0.
int multi_dimension_array[x][y][z];
Run Code Online (Sandbox Code Playgroud)
我可以用线条记住整个事情:
memset(multi_dimension_array, 0, sizeof(multi_dimension_array));
Run Code Online (Sandbox Code Playgroud)
但是现在假设我只想将x维度设置为某个值(比如2),这意味着multi_dimension_array [2] [0] [0]到multi_dimension_array [2] [y-1] [z-1]的值应该全部为零.我不认为这是一个聪明的方法来使用memset y或z,因为它们不是连续的.以下行应该有效:
memset(&multi_dimension_array[2][0][0], 0, sizeof(multi_dimension_array[2][0][0]) * y * z);
Run Code Online (Sandbox Code Playgroud)
我的"问题"是我不喜欢memset param的*y*z部分.数组中是否存在sizeof(multi_dimension_array [2])== byte_size_of_type*y*z?
我想使用sizeof将在此示例中评估为"x"维度的正确字节数的数组属性.我不想在有人改变声明中的大小并且他们不改变这个memset的情况下使用*y*z,而且我不喜欢它看起来如何.
memset(&multi_dimension_array[2], 0, sizeof multi_dimension_array[2]);
这需要multi_dimension_array[i]是一个数组数组的数组,而不是指针.它的工作原理是,当sizeof应用于数组时,它返回数组的大小.与大多数表达式一样,该数组不会自动转换为指针.
当然,它仅适用于第一维(或前几个维度,如果您执行多个维度).例如,您可以使用一个带有array[i]或array[i][j]不带有中间维度的memset,例如array[???][j].
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |