第一種方式“.”引用
第一步:先定義一個結(jié)構(gòu)體
#pragma pack(1) /*1字節(jié)對齊*/
typedef struct
{
char xuehao[20]; //學(xué)號
char xingming[20]; //姓名
float fenshu; //分數(shù)
int age; //年齡
}student_t;
#pragma pack()/*還原默認對齊*/
這里采用的是常用的typedef關(guān)鍵字進行定義結(jié)構(gòu)體類型,可以看到student_t這種數(shù)據(jù)類型里面有4個成員變量,分別是學(xué)號、姓名、分數(shù)、年齡,這些成員變量既然是變量就應(yīng)該滿足變量的基本特征,也就是說可以被賦值,可以被引用,下面直接看代碼
student_t stu1, stu2; //此時stu1,stu2為student_t結(jié)構(gòu)體類型的變量
strcpy(stu1.xingming, "初出茅廬的小李");//數(shù)組變量賦值字符串操作
strcpy(stu1.xuehao, "10086"); //數(shù)組變量賦值字符串操作
stu1.fenshu = 99.0; //浮點數(shù)賦值操作
stu1.age = 10; //整形數(shù)賦值操作
strcpy(stu2.xingming, "張三");
strcpy(stu2.xuehao, "10010");
stu2.fenshu = 89.5;
stu2.age = 12;
//左滑可以查看全部
這里可以看到stu1結(jié)構(gòu)體和stu2結(jié)構(gòu)體的4個成員分別被引用了 引用的格式是:結(jié)構(gòu)體變量名.結(jié)構(gòu)體成員名
第二步:打印觀察賦值效果
代碼如下:
printf("\\r\\n\\r\\n**********小李的創(chuàng)客實驗室**********\\r\\n\\r\\n");
printf("====================================\\r\\n");
printf("stu1的姓名是:%s\\r\\n", stu1.xingming);
printf("stu1的學(xué)號是:%s\\r\\n", stu1.xuehao);
printf("stu1的年齡是:%d\\r\\n", stu1.age);
printf("stu1的分數(shù)是:%f\\r\\n", stu1.fenshu);
printf("====================================\\r\\n");
printf("stu2的姓名是:%s\\r\\n", stu2.xingming);
printf("stu2的學(xué)號是:%s\\r\\n", stu2.xuehao);
printf("stu2的年齡是:%d\\r\\n", stu2.age);
printf("stu2的分數(shù)是:%f\\r\\n", stu2.fenshu);
printf("====================================\\r\\n");
//左滑可以查看全部
輸出結(jié)果如下:
第二種方式“->”引用
下面來看第二種常用的引用方法,這種方法經(jīng)常用做結(jié)構(gòu)體傳參的場合,很多參數(shù)需要傳遞的時候,比如在STM32配置串口波特率、停止位、數(shù)據(jù)位、校驗位、這些參數(shù)的時候就會應(yīng)用到,比較方便只需要一個結(jié)構(gòu)體指針變量就可以訪問結(jié)構(gòu)體的各個成員變量,下面直接來看實例
代碼如下:
void printf_stu(student_t *stu)
{
printf("stu的姓名是:%s\\r\\n", stu- >xingming);
printf("stu的學(xué)號是:%s\\r\\n", stu- >xuehao);
printf("stu的年齡是:%d\\r\\n", stu- >age);
printf("stu的分數(shù)是:%f\\r\\n", stu- >fenshu);
}
//左滑可以查看全部
這是一個自定義的打印函數(shù),參數(shù)是student_t類型的指針,也就是結(jié)構(gòu)體變量的一個地址,調(diào)用如下
printf("====================================\\r\\n");
printf_stu(&stu1);
printf("====================================\\r\\n");
printf_stu(&stu2);
//左滑可以查看全部
觀察實驗現(xiàn)象
可以看出,通過傳入函數(shù)不同的參數(shù),就可以得到不同的輸出這在很多配置參數(shù)的場合就顯得非常重要
舉例說明:
配置C端口參數(shù)就是傳入這樣一個結(jié)構(gòu)體變量的地址
第三種方式引用
其實這種方式我感覺不常用,但是有助于理解指針變量的真實含義就是指針變量取內(nèi)容的操作,取內(nèi)容和取地址是跟指針緊密相關(guān)的知識點這里簡單說一下,以后有時間我們再來詳細探討這里面的細節(jié)。
void printf_stu(student_t *stu)
{
printf("stu的姓名是:%s\\r\\n", stu- >xingming);
printf("stu的學(xué)號是:%s\\r\\n", stu- >xuehao);
printf("stu的年齡是:%d\\r\\n", stu- >age);
printf("stu的分數(shù)是:%f\\r\\n", stu- >fenshu);
}
printf_stu(&stu1);
void printf_stu2(student_t *stu)
{
printf("stu的姓名是:%s\\r\\n", (*stu).xingming);
printf("stu的學(xué)號是:%s\\r\\n", (*stu).xuehao);
printf("stu的年齡是:%d\\r\\n", (*stu).age);
printf("stu的分數(shù)是:%f\\r\\n", (*stu).fenshu);
}
//左滑可以查看全部
通過以上對比實驗大家可以發(fā)現(xiàn),其實兩種寫法輸出效果是一樣的,這就說明了取內(nèi)容和取地址是互逆的操作。
總結(jié):不管那一種引用方式都是為了應(yīng)用、各種方式都有自己的特點,根據(jù)應(yīng)用場景靈活運用才是正道,至于第二種和第三種的區(qū)別我個人感覺不大,其實我用的最多的還是第一種哈~
-
STM32
+關(guān)注
關(guān)注
2272文章
10925瀏覽量
357732 -
C語言
+關(guān)注
關(guān)注
180文章
7614瀏覽量
137800
發(fā)布評論請先 登錄
相關(guān)推薦
用C語言的結(jié)構(gòu)體實現(xiàn)字節(jié)、位操作
C語言結(jié)構(gòu)體(struct)常見使用方法
ccs程序在結(jié)構(gòu)體后面打上點(.)后結(jié)構(gòu)體成員不出現(xiàn)
Keil5里結(jié)構(gòu)體變量成員名自動補全功能不能用了
漫談C語言結(jié)構(gòu)體
【干貨】c語言基礎(chǔ)語法——結(jié)構(gòu)體
結(jié)構(gòu)體變量的定義與使用變量訪問結(jié)構(gòu)體成員
測試結(jié)構(gòu)體成員內(nèi)存對齊的方式方法
簡單分析linux內(nèi)核中的結(jié)構(gòu)體使用方法
C語言中的結(jié)構(gòu)體指針在訪問的時候怎么讀取成員變量的數(shù)據(jù)?
求助,結(jié)構(gòu)體變量定義引用問題求解
C語言如何定義結(jié)構(gòu)體類型變量
結(jié)構(gòu)體成員變量的引用方法
![<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b><b class='flag-5'>成員</b><b class='flag-5'>變量</b>的<b class='flag-5'>引用</b><b class='flag-5'>方法</b>](https://file1.elecfans.com/web2/M00/8A/0F/wKgZomSP3myAfPrgAAE1yxU-Was748.jpg)
評論