{}
這種語法不能用於結構體的賦值,只能用於初始化。例如這樣是錯誤的:
struct complex_struct z1;
z1 = ;
結構體變數之間使用賦值運算子是允許的,用乙個結構體變數初始化另乙個結構體變數也是允許的;
陣列不能相互賦值或初始化 ,既然不能相互賦值,也就不能用陣列型別作為函式的引數或返回值
void foo(int a[5])
然後這樣呼叫:
int array[5] = ;
foo(array);
編譯器也不會報錯,但這樣寫並不是傳乙個陣列型別引數的意思。對於陣列型別有一條特殊規
則: 陣列型別做右值使用時,自動轉換成指向陣列首元素的指標。所以上面的函式呼叫其實是傳一
個指標型別的引數,而不是陣列型別的引數。
這也解釋了為什麼陣列型別不能相互賦值或初始化,例如上面提到的
a = b
這個表示式, a和
b都是陣列型別的變數,但是
b做右值
使用,自動轉換成指標型別,而左邊仍然是陣列型別,所以編譯器報的錯是
error: incompatible
陣列,結構體初始化 0
一直以為 int a 256 是把a的所有元素初始化為0,int a 256 是把a所有的元素初始化為1.除錯的時檢視記憶體發現不是那麼一回事,翻了一下 the c programming language 總算有定論。pdf的竟然不然複製,就把它這章翻譯了,如下 5.2.1 陣列初始化 陣列可以用...
結構體初始化 指定初始化
參考 c99支援結構的指定初始化專案,其語法與陣列的指定初始化專案近似。只是,結構的指定初始化專案使用點運算子和成員名 而不是方括號和索引值 來標識具體的元素。例如,只初始化book結構的成員value,可以這樣做 struct book surprise 可以按照任意的順序使用指定初始化專案 st...
C語言中的結構體,結構體中陣列初始化與賦值
最近寫c語言中的結構體遇到了些問題,從網上找了些資料如下 結構體是連續儲存的,但由於結構體中成員型別各異,所以會存在記憶體對齊問題,也就是記憶體裡面會有空檔,具體的對齊方式這裡 暫不討論 結構體是可以直接初始化的,在定義的時候,就可以初始化,而且如果你的結構體中恰好有字元陣列的話,這個時候初始化是不...