結構體初始化的方法

2021-06-20 03:52:50 字數 1561 閱讀 9079

最近專案小組在去除**中的warning,在修正**的過程中看到了對結構體不正確的初始化方式:

假設有乙個如下的struct定義:

structastruct

;structastruct   test=;

即使astruct中都是基礎型別的成員這樣的初始化話也是不正確的。

這種初始化僅僅是把a變數設定為了0,而未對b變數做初始化。

產生這樣錯誤的原因,大概是收到陣列初始化的影響。陣列是可以這麼初始化話的,而且初始化的值只能是0!

對結構體的初始化,可以有一下三種。

structtest

;intmain()

;structtest   t2=;  

structtest   t3=;  

printf(「t1.a = %d, t1.b = %d/n」, t1.a, t1.b);

printf(「t2.a = %d, t2.b = %d/n」, t2.a, t2.b);

printf(「t3.a = %d, t3.b = %d/n」, t3.a, t3.b);

return0;}

第一種使我們最常見的方式,2,3種方式應該是c99所支援的,但是在微軟的編譯器中不支援c99,所以才會給人以只有gcc支援的錯覺。第一種方式盡量少寫。在生成彙編**時,會消耗掉非常多的時鐘週期。

(二)卡的驅動就不需要從目錄的結構 中讀取資料。那麼,相對應的file_operations重的項

就為 null。gcc還有乙個方便使用這種結構體的擴充套件。你會在較現代的驅動核心模組中見到。 新的使用這種結構體的方式如下:

struct   file_operations   fops = ;

同樣也有c99語法的使用該結構體的方法,並且它比gnu擴充套件更受推薦。我使用的版本為 2.95為了方便那些想移植你的**的人,你最好使用這種語法。它將提高**的相容性:

struct   file_operations   fops = ;

(三)#include

struct   date

;void   main()

; //2008-2-12

//struct date time_1=; //2008-2-2

//struct date time_1=; //2008-2008-12

//struct date time_1=; //2008-12-2008

//struct date time_1=; //2008-2-2

//struct date time_1=; //2008-2-2008

printf("%d-%d-%d/n",time_1.year,time_1.month,time_1.day);

}用此種方式時,struct date time_1=;//2008-2-2

其初始化順序不能調..

**:

結構體初始化 指定初始化

參考 c99支援結構的指定初始化專案,其語法與陣列的指定初始化專案近似。只是,結構的指定初始化專案使用點運算子和成員名 而不是方括號和索引值 來標識具體的元素。例如,只初始化book結構的成員value,可以這樣做 struct book surprise 可以按照任意的順序使用指定初始化專案 st...

結構體初始化

結構體變數初始化 tag 結構體,結構體變數,結構體變數宣告,結構體變數初始化,結構體變數引用,結構體成員變數引用 text c語言中引用變數的基本原則是在使用變數前,需要對變數進行定義並初始化。其方法是在定義變數的同時給其一初始值。結構體變數的初始化,遵循相同的規律。簡單變數的初始化形式如下 資料...

結構體的初始化

早先在看開源 中學到的乙個初始化結構體的技巧,今天剛剛用上。特意整理了一下。struct a 早先我所採用的方法 方法一 struct a a a.a 1 a.b 2 現在所採用的方法 方法二 是從開源 中所學會的,定義結構體的同時初始化結構體成員變數 struct a a 相比較方法一,方法二明顯...