2016-03-04 44 views
2

我已經下面的結構:初始化指針的元素,以一個結構

typedef struct{ 
    int freq; 
    char val; 
} Char; // alias 

我需要創建一個緩衝器(指針)到一定數量的Char如下:

Char* chars = calloc(256, sizeof(Char)); 

而且我想在chars初始化freq-1所有Char結構。沒有循環可以做到嗎?

+0

' memset',如果你不介意在'val'中有'-1'或其他垃圾。 –

+0

@EugeneSh。 'val'可以是任何提供它的東西,當然是'char',但'-1'不是字符,或者它是?其實我忘了,當我用'char val'聲明一個變量時,我聲明瞭一個8位有符號整數,對吧?這意味着-1將被視爲「char」,對吧? – nbro

+1

無論如何,這是一個壞主意,因爲'memset'只能填充字節值。而爲了填充int,你將不得不承擔一個特定的負數表示,這是不可移植的。 –

回答

2

如果你使用GCC,你可以做Char s[256] = {[0 ... 255] = {-1, 0}};

{-1, 0}是結構初始化

編輯:你可以看看這個帖子: How to initialize all members of an array to the same value? 這將給予極大的提示:)

+0

好吧,現在你在說...更新:實際上OP是問動態分配的數組,所以它不會工作...但它是一個很好的指針。 –

+0

的鏈接給出了函數: '空隙array_init(無效*開始,爲size_t element_size,爲size_t元件,無效* initval){ 的memcpy(開始,initval,element_size); memcpy((char *)start + element_size,start,element_size *(elements-1)); }' 它可以用來動態分配數組:) –