注:有类似这种仅限于C++,我没有发现任何方面有用的帖子到C.设置所有的元素,以一个相同的值用C
的帖子我想设置元素的数组具有相同的价值。当然,这可以简单地使用for循环来实现。
但是,这会消耗大量时间。因为在我的算法中,这个具有相同值的设置数组会发生很多次。有没有简单的方法可以在C中实现这一点。
注:有类似这种仅限于C++,我没有发现任何方面有用的帖子到C.设置所有的元素,以一个相同的值用C
的帖子我想设置元素的数组具有相同的价值。当然,这可以简单地使用for循环来实现。
但是,这会消耗大量时间。因为在我的算法中,这个具有相同值的设置数组会发生很多次。有没有简单的方法可以在C中实现这一点。
至于建议由其他用户,使用memset
如果你想与0值来启动你的阵列,但如果值不这样做并不那么简单。
对于更复杂的值,你可以有你的初始值的不断复制,后来与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];
...
您可以使用memset()
。它填充了您想填充相同字节值的字节数。 Here 你可以阅读手册页。
您可以轻松地memset
阵列0
如果你想有一个不同的值,这一切都取决于所使用的类型。
对于的char *阵列可以将它们memset
任何价值,因为char是几乎总是一个字节长。
对于阵列结构的,如果一个结构的所有字段都用0或NULL被初始化,则可以用0
memset
它不能memset的结构的阵列或阵列的任何值不是0,因为memset在单个字节上运行。所以如果你用1来memset一个int[]
,你将不会有一个1的数组。
要使用自定义值初始化结构数组,只需填写一个结构和所需的数据,然后在for
中执行赋值。编译器应该为你做相对高效的工作。
如果您正在讨论初始化,请参阅this question。如果你想稍后设置这些值,那么使用memset
那么你只能将你的值设置为0为特定的数组。这里是一个例子
int arr[5]={0};
使用for循环。任何体面的编译器都会尽可能地优化它。
您几乎无法确定您的for
循环的速度。没有什么神奇的方法可以将值存储到多个存储器位置,而不是将这些值存储到这些多个存储器位置。无论您是否使用for
循环,都必须写入所有位置,这需要大部分时间。
当然,void * memset (void * ptr, int value, size_t num);
由相同字节组成的值,但在它下面有一个循环。也许这个实现对于使用这个循环可能非常聪明,但优化编译器也是如此。
虽然memset
需要一个int
,它其设置成存储区域之前转换为unsigned char
。
@chux你说得对,我编辑过以反映这一点。谢谢! – dasblinkenlight
这里,要设置的值是动态获取的,并且足够大。所以'memset'可以被排除,因为它可以用来将所有元素设置为'unsigned char'。 – Chaitanya
可以使用memset()
功能
例子:
memset(<array-name>,<initialization-value>,<len>);
什么是数组类型和价值是什么? – chill
[如何在C中初始化一个数组]可能的重复(http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c) –