c c 結構體賦初值的小技巧

2021-08-14 09:26:12 字數 1498 閱讀 7309

今天看到專案中對自定義結構體初始化方式有點陌生,特在此羅列一下可用的結構體初始化的方式。

對結構體

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...