注意:对于C ++,有类似的帖子,我没有找到任何关于C的有用帖子。
我想设置具有相同值的元素数组。当然,这可以通过简单地使用for循环来实现。
但是,这会耗费大量时间。因为,在我的算法中,具有相同值的设置数组会发生很多次。有没有简单的方法来实现这一点。
答案 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};