今天看到專案中對自定義結構體初始化方式有點陌生,特在此羅列一下可用的結構體初始化的方式。
對結構體
struct a
有幾種初始化方式:
第一種:
struct a a = ;
第二種:
struct a a=;
第三種:
struct a a1 = ;
linux核心喜歡用第一種,使用第一種和第二種時,成員初始化順序可變。
第四種:
因為c++中的struct可以看作class,結構體也可以擁有建構函式,所以我們可以通過結構體的建構函式來初始化結構體物件。
給定帶有建構函式的結構體:
struct a ;
int b;
int c;
}
那麼結構體物件的初始化可以像類物件的初始化那樣,如下形式:
struct a a(1,2);
注意:struct如果定義了建構函式的話,就不能用大括號進行初始化了,即不能再使用前三種初始化的方式了。
變數的賦值和初始化是不一樣的,初始化是在變數定義的時候完成的,是屬於變數定義的一部分,賦值是在變數定義完成之後想改變變數值的時候所採取的操作。
還是給定結構體a:
struct a
注意:結構體變數的賦值是不能採用大括號的方式進行賦值的,例如下面的賦值是不允許的。
struct a a;
//錯誤賦值
a=;
下面列出常見結構體變數賦值的方法。
第一種:
使用memset對結構體變數進行置空操作:
//按照編譯器預設的方式進行初始化(如果a是全域性靜態儲存區的變數,預設初始化為0,如果是棧上的區域性變數,預設初始化為隨機值)
struct a a;
memset(&a,0,sizeof(a));
第二種:
依次給每乙個結構體成員變數進行賦值:
struct a a;
a.b=1;
a.c=2;
第三種:
使用已有的結構體變數給另乙個結構體變數賦值。也就是說結構體變數之間是可以相互賦值的。
struct a a=;
struct a aa;
aa=a; //將已有的結構體變數付給aa
[2] 結構體初始化
c c 結構體賦初值的小技巧
今天看到專案中對自定義結構體初始化方式有點陌生,特在此羅列一下可用的結構體初始化的方式。對結構體 struct a有幾種初始化方式 第一種 struct a a 第二種 struct a a 第三種 struct a a1 linux核心喜歡用第一種,使用第一種和第二種時,成員初始化順序可變。第四種...
C語言結構體賦初值
舊的c標準不支援在定義結構體的時候賦值,例如vs2010和vc 6.0 之前我發現我寫的在vs2019上執行正常的程式複製到vc6上就報錯,一方面是因為舊的c標準不支援一些新函式比如scanf s和get s,另一方面是某些特性改變了,比如舊的c標準不支援在定義結構體的時候賦值,在定義結構體的時候並...
C C 對陣列賦初值的方法memset,fill
函式格式 memset 陣列名,值,sizeof 陣列名 使用memset需要引用string.h 值只能是0或者 1,因為memset是按位元組賦值,要麼全0,要麼全1 其實賦值其他也可以,只是計算比較複雜,int是4個位元組,memset是按位元組賦值,如果賦值1,memset a,1,size...