物聯(lián)網(wǎng)/嵌入式工程師
重磅升級:新增硬件電路設(shè)計與實戰(zhàn),讓你軟硬通吃,同級PK無敵!行業(yè)風(fēng)口、政策傾斜,新晉熱門高薪不內(nèi)卷!0基礎(chǔ)一站式就業(yè)完整路徑,搶占先發(fā)優(yōu)勢!
在上一小結(jié),利用數(shù)組的知識,很方便的存儲了全班 50 名同學(xué)的數(shù)學(xué)成績。
#include <stdio.h> int main(int argc,char **argv) { int math[50]; return 0; }
有的同學(xué)可能會這樣寫:
#include <stdio.h> int main(int argc,char **argv) { int math[50]; int english[50]; return 0; }
這樣做是可以的,程序也是可以跑的。那么有沒有可能讓程序變得更好呢?
我們來思考一下。我們的這個程序里,實際上所有的成績都是分開的,之間并沒有什么關(guān)聯(lián),這樣會帶來一個問題,那就是當(dāng)我們想集中操作某一個學(xué)生的成績的時候,就會變得有一些麻煩。
例如,我們要計算某個學(xué)生的平均分的時候,我們實際上只能通過下標(biāo)來搜索某個學(xué)生的成績。
那么有沒有辦法能讓這個問題得到改善呢?能讓同一個學(xué)生的成績"打包"存放。
事實上,在這個問題里,我們需要的是一種基礎(chǔ)數(shù)據(jù)類型之外的數(shù)據(jù)類型,這種數(shù)據(jù)類型指代了一個學(xué)生,其中包含兩個部分,第一個部分用來存放學(xué)生的數(shù)學(xué)成績,第二個部分用來存放學(xué)生的英語成績。
C++ 為我們提供了這樣一種自定義數(shù)據(jù)類型的功能,叫做結(jié)構(gòu)體。你可以定義一個結(jié)構(gòu)體,用幾種相同或者不同的基本數(shù)據(jù)類型的組合自定義這個數(shù)據(jù)類型中的內(nèi)容。這樣,我們就可以完成數(shù)據(jù)"打包"的目標(biāo)。
在定義了一個結(jié)構(gòu)體之后,我們就可以使用這個結(jié)構(gòu)體了,結(jié)構(gòu)體的使用和變量非常類似:
struct Student { int math; int english; }; int main(int argc,char **argv) { struct Student stu; return 0; } ````
這樣申明一個結(jié)構(gòu)體變量stu之后,這個 stu 中就包含兩個變量,一個是 int 類型的 math,一個是 int 類型的 english。那么這個時候,這兩個值其實并沒有被初始化,這兩個值是隨機(jī)的值。我們可以用如下代碼來為這兩個變量進(jìn)行賦值。
stu.math = 95; stu.english = 93;
還有一種方法,可以在申明結(jié)構(gòu)體變量的時候進(jìn)行初始化。
struct Student stu = {95, 93};
回到我們最初的問題,記錄50個學(xué)生的成績,程序應(yīng)該怎么寫呢?
struct Student { int math; int english; } int main(int argc,char **argv) { struct Student stu[50]; //為其中一個學(xué)生的成績賦值 stu[20].math = 90; stu[20].english = 95; return 0; }
請驗證,完成請求
由于請求次數(shù)過多,請先驗證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報