将所有元素设置为C中的相同值

时间:2013-10-01 09:27:29

标签: c arrays

注意:对于C ++,有类似的帖子,我没有找到任何关于C的有用帖子。

我想设置具有相同值的元素数组。当然,这可以通过简单地使用for循环来实现。

但是,这会耗费大量时间。因为,在我的算法中,具有相同值的设置数组会发生很多次。有没有简单的方法来实现这一点。

8 个答案:

答案 0 :(得分:4)

使用for循环。任何体面的编译器都会尽可能地优化它。

答案 1 :(得分:3)

几乎可以肯定的是,您无法大幅提高for循环的速度。没有什么神奇的方法可以将值设置到多个内存位置,而不是将该值存储到这些多个内存位置。无论您是否使用for循环,都必须写入所有位置,这占用了大部分时间。

当然void * memset ( void * ptr, int value, size_t num );的值由相同的字节 1 组成,但是它有一个循环。也许实现可能非常聪明地使用该循环,但优化编译器也是如此。

1 虽然memset需要int,但在将其设置到内存区域之前会将其转换为unsigned char

答案 2 :(得分:3)

正如其他用户所建议的那样,如果要使用0值启动数组,请使用memset,但如果值不是那么简单,则不要这样做。

对于更复杂的值,您可以获得初始值的常量副本,然后使用memcpy复制它们:

float original_values[100]; // don't modify these values
original_values[0] = 1.2f;
original_values[1] = 10.9f; 
...

float working_values[100]; // work with these values
memcpy(working_values, original_values, 100 * sizeof(float));
// do your task
working_values[0] *= working_values[1];
...

答案 3 :(得分:1)

您可以使用memset()。它不会填充任何要填充相同字节值的字节。Here 你可以阅读手册页。

答案 4 :(得分:1)

您可以使用memset()功能

示例:

memset(<array-name>,<initialization-value>,<len>);

答案 5 :(得分:0)

您可以轻松地memset数组为0.

如果你想要一个不同的值,这一切都取决于使用的类型。

对于 char * 数组,您可以memset将它们设置为任意值,因为char 几乎总是一个字节长。

对于结构数组,如果要使用0或NULL初始化结构的所有字段,则可以memset将其设为0。

您不能将数组或结构数组memset到0以外的任何值,因为memset在单个字节上运行。因此,如果您将int[]设为1,则不会有1的数组。

要使用自定义值初始化结构数组,只需使用所需数据填充一个结构,然后在for中进行分配。编译器应该相对有效地为您完成。

答案 6 :(得分:0)

如果您正在谈论初始化,请参阅this question。如果您想稍后设置值,请使用memset

答案 7 :(得分:0)

您只能将特定数组的值设置为零。这是一个例子

int arr[5]={0};