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

2021-08-15 14:39:02 字數 581 閱讀 9005

{}

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

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語言中的結構體遇到了些問題,從網上找了些資料如下 結構體是連續儲存的,但由於結構體中成員型別各異,所以會存在記憶體對齊問題,也就是記憶體裡面會有空檔,具體的對齊方式這裡 暫不討論 結構體是可以直接初始化的,在定義的時候,就可以初始化,而且如果你的結構體中恰好有字元陣列的話,這個時候初始化是不...