1. 程式人生 > >結構體和陣列的初始化和賦值

結構體和陣列的初始化和賦值

{} 這種語法不能用於結構體的賦值,只能用於初始化。例如這樣是錯誤的:
struct complex_struct z1;

z1 = { 3.0, 4.0 };

結構體變數之間使用賦值運算子是允許的,用一個結構體變數初始化另一個結構體變數也是允許的;
陣列不能相互賦值或初始化 ,既然不能相互賦值,也就不能用陣列型別作為函式的引數或返回值 
void foo(int a[5])
{
...
}
然後這樣呼叫:
int array[5] = {0};
foo(array);
編譯器也不會報錯,但這樣寫並不是傳一個數組型別引數的意思。對於陣列型別有一條特殊規
則: 陣列型別做右值使用時,自動轉換成指向陣列首元素的指標。所以上面的函式呼叫其實是傳一
個指標型別的引數,而不是陣列型別的引數。

這也解釋了為什麼陣列型別不能相互賦值或初始化,例如上面提到的a = b這個表示式, ab都是陣列型別的變數,但是b做右值
使用,自動轉換成指標型別,而左邊仍然是陣列型別,所以編譯器報的錯是
error: incompatible