2013-10-01 46 views
0

注:有类似这种仅限于C++,我没有发现任何方面有用的帖子到C.设置所有的元素,以一个相同的值用C

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

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

+0

什么是数组类型和价值是什么? – chill

+0

[如何在C中初始化一个数组]可能的重复(http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c) –

回答

3

至于建议由其他用户,使用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]; 
... 
1

您可以使用memset()。它填充了您想填充相同字节值的字节数。 Here 你可以阅读手册页。

0

您可以轻松地memset阵列0

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

对于的char *阵列可以将它们memset任何价值,因为char是几乎总是一个字节长。

对于阵列结构的,如果一个结构的所有字段都用0或NULL被初始化,则可以用0

memset它不能memset的结构的阵列或阵列的任何值不是0,因为memset在单个字节上运行。所以如果你用1来memset一个int[],你将不会有一个1的数组。

要使用自定义值初始化结构数组,只需填写一个结构和所需的数据,然后在for中执行赋值。编译器应该为你做相对高效的工作。

0

如果您正在讨论初始化,请参阅this question。如果你想稍后设置这些值,那么使用memset

0

那么你只能将你的值设置为0为特定的数组。这里是一个例子

int arr[5]={0}; 
4

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

3

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

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

虽然memset需要一个int,它其设置成存储区域之前转换为unsigned char

+0

@chux你说得对,我编辑过以反映这一点。谢谢! – dasblinkenlight

+0

这里,要设置的值是动态获取的,并且足够大。所以'memset'可以被排除,因为它可以用来将所有元素设置为'unsigned char'。 – Chaitanya

1

可以使用memset()功能

例子:

memset(<array-name>,<initialization-value>,<len>); 
相关问题