gpt4 book ai didi

c - 如何在 C 中将数组的一维 memset 为零

转载 作者:行者123 更新时间:2023-12-01 15:39:04 31 4
gpt4 key购买 nike

假设我有一个全局声明的 3d 数组(在数据段中),我想将其 1d 的 memset 设置为 0。

int multi_dimension_array[x][y][z];

我可以用这条线 memset 整个事情:

memset(multi_dimension_array, 0, sizeof(multi_dimension_array));

但现在假设我只想为某个值(比如 2)存储 x 维度,这意味着 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);

我的“问题”是我不喜欢 memset 参数的 * 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 应用于数组时,它会返回数组的大小。数组不会像大多数表达式那样自动转换为指针。

当然,它只适用于第一个维度(或者前几个维度,如果你做的不止一个)。例如,您可以将一个 memset 与 array[i]array[i][j] 一起使用,但不能与 array[??? ][j].

关于c - 如何在 C 中将数组的一维 memset 为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50478273/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com