我已經下面的結構:初始化指針的元素,以一個結構
typedef struct{
int freq;
char val;
} Char; // alias
我需要創建一個緩衝器(指針)到一定數量的Char
如下:
Char* chars = calloc(256, sizeof(Char));
而且我想在chars
初始化freq
到-1
所有Char
結構。沒有循環可以做到嗎?
我已經下面的結構:初始化指針的元素,以一個結構
typedef struct{
int freq;
char val;
} Char; // alias
我需要創建一個緩衝器(指針)到一定數量的Char
如下:
Char* chars = calloc(256, sizeof(Char));
而且我想在chars
初始化freq
到-1
所有Char
結構。沒有循環可以做到嗎?
如果你使用GCC,你可以做Char s[256] = {[0 ... 255] = {-1, 0}};
{-1, 0}
是結構初始化
編輯:你可以看看這個帖子: How to initialize all members of an array to the same value? 這將給予極大的提示:)
好吧,現在你在說...更新:實際上OP是問動態分配的數組,所以它不會工作...但它是一個很好的指針。 –
的鏈接給出了函數: '空隙array_init(無效*開始,爲size_t element_size,爲size_t元件,無效* initval){ 的memcpy(開始,initval,element_size); memcpy((char *)start + element_size,start,element_size *(elements-1)); }' 它可以用來動態分配數組:) –
' memset',如果你不介意在'val'中有'-1'或其他垃圾。 –
@EugeneSh。 'val'可以是任何提供它的東西,當然是'char',但'-1'不是字符,或者它是?其實我忘了,當我用'char val'聲明一個變量時,我聲明瞭一個8位有符號整數,對吧?這意味着-1將被視爲「char」,對吧? – nbro
無論如何,這是一個壞主意,因爲'memset'只能填充字節值。而爲了填充int,你將不得不承擔一個特定的負數表示,這是不可移植的。 –