2015-12-15 40 views
0
int zero[5][4] = { 
    { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } 
    }; 
    int m1[5][4] = { 
    { 1, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 1, 0 }, { 0, 0, 0, 1 } 
    }; 

    //errors here 
    m1 = zero; 
    m1 = { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } }; 
    m1[0] = { 0, 0, 0, 0 }; 

這是否沒有語法?我是否必須使用帶索引的循環來實現這一點?如何複製和分配數組數組?

+2

一個恆定值是['memcpy'](http://linux.die.net/man/3/ memcpy)適合你嗎?或['memset'](http://linux.die.net/man/3/memset),如果你想設置爲全零。 – kaylum

回答

4

在C中,數組不可分配或不能位於賦值(=)運算符的左側。使用memcpy

memcpy(m1, zero, sizeof(zero)); // Assuming size of 'm1' is no less than the size of 'zero' 

可以使用memset設置一個陣列中包含0-1

memset(m1, 0, sizeof(m1)); 
+0

http://port70.net/~nsz/c/c11/n1570.html#7.24.6.1p2'memset'基本上是一個'unsigned char',所以你不能使用'-1'。另外應該澄清的是,除'0'以外的任何其他值都是實現定義的 - 充其量,因爲memset不關心目標的數據類型。它只是寫字節。 – Olaf

+0

@Olaf; http://stackoverflow.com/a/24207764/2455888 – haccks

+0

我不明白這一點。它仍然是爲負值定義的實現。並且,在這個海報中,memset已經知道數組的類型(這個問題對於'struct'來說更少)。我的說法是:除了'char []'外,'memset'只對數組爲零是有用的,即使這對整型以外的類型也是有用的,因爲只有對於這些「所有位0」才意味着值「0」。沒有要求例如一個_null指針_將所有位清零,對於浮點數也不能將其解釋爲'0.0'。 – Olaf