首先我們舉個例子。在
struct studentinfo stu;
中,我們先定義乙個studentinfo的結構體變數,然後對其中的元素逐一賦值。例如:
//第一種方法
stu.id = 1;
stu.genger = 'm';
//第二種方法
scanf("%d %c",&stu.id, &stu.gender);
但這兩種方法都太麻煩。
接下來給大家介紹一種建構函式的方法,它直接定義在結構體中,不需要寫返回型別,且函式名與結構體名相同。其實每乙個普通的結構體中,內部都自動生成了乙個預設的建構函式「studentinfo(){}」(但是不可見的)。
struct studentinfo
};
它看起來和c++中的類的建構函式十分相似。是的,接下來你也可以這麼來學習。這是乙個空的建構函式,裡面沒有任何東西,他會初始化結構體中的變數,賦上預設引數。如果你不想按照系統預設的建構函式初始化引數,想要自己手動提供id和gender的初始化引數,只需要重寫建構函式就可以了。(
注意:如果重寫了建構函式,就會自動覆蓋系統提供的預設建構函式,下次定義結構體的時候就必須按照自己寫的建構函式來定義結構體變數)。
為了既可以按照自己寫的結構體的建構函式初始化結構體變數,也可以使用系統預設的結構體的建構函式初始化變數,那麼可以同時寫多個建構函式。把系統的預設建構函式和自己寫的建構函式都放在結構體裡面,就可使用這幾種不同的建構函式初始化結構體中的變數。具體用到的是哪一種,就要看你呼叫了哪個建構函式,因為每個建構函式的引數個數和型別不能完全相同,所以在建構函式中出入不同的引數時,系統就會去找和你傳入的引數型別和個數相同的建構函式。例如:
struct studentinfo
//只初始化gender的建構函式
studentinfo(char _gender)
//同時初始化id和gender的建構函式
studentinfo(int _id, char _gender)
};
最後是乙個應用例項。其中結構體point用於存放平面點的座標x,y。
#include #include struct point //不同初始化的定義結構體
point(int _x, int _y)
}pt[10];
int main()
}for(int i = 0; i < num; i++)
return 0;
}
C語言結構體初始化
1 2 test.c 3 2018 1 30 4 5 include 6 7 struct studen 12 13 14 15 int main void 16 19 20 number two 先定義再乙個個初始化 21 struct studen std2 22 std2.id 120 23 ...
C語言結構體的初始化
今天在工作時,看到了奇葩的結構體初始化方式,於是我查了一下c99標準文件和gcc的說明文件,終於搞清楚是怎麼回事了。假設有如下結構體定義 typedef struct mystruct 那麼結構體的初始化方式如下有三種 1 c89的初始化方式 mystruct test 這種初始化的優點是語法簡單,...
C 結構體初始化
今天在看mfc結構時,順便看了看 深入淺出mfc 發現有這麼一行 m pmainwnd new cmyframewnd 乍一看,很正常啊,再仔細一看,貌似 new cmyframewnd 的時候少了一對括號。奇怪!之後又翻了翻書,發現好多處都是這樣的。難道我弄錯了,不可能啊,一般情況下在new乙個新...