2013-10-01 47 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>); 
相關問題