第一種方式“.”引用
第一步:先定義一個結構體
#pragma pack(1) /*1字節對齊*/
typedef struct
{
char xuehao[20]; //學號
char xingming[20]; //姓名
float fenshu; //分數
int age; //年齡
}student_t;
#pragma pack()/*還原默認對齊*/
這里采用的是常用的typedef關鍵字進行定義結構體類型,可以看到student_t這種數據類型里面有4個成員變量,分別是學號、姓名、分數、年齡,這些成員變量既然是變量就應該滿足變量的基本特征,也就是說可以被賦值,可以被引用,下面直接看代碼
student_t stu1, stu2; //此時stu1,stu2為student_t結構體類型的變量
strcpy(stu1.xingming, "初出茅廬的小李");//數組變量賦值字符串操作
strcpy(stu1.xuehao, "10086"); //數組變量賦值字符串操作
stu1.fenshu = 99.0; //浮點數賦值操作
stu1.age = 10; //整形數賦值操作
strcpy(stu2.xingming, "張三");
strcpy(stu2.xuehao, "10010");
stu2.fenshu = 89.5;
stu2.age = 12;
//左滑可以查看全部
這里可以看到stu1結構體和stu2結構體的4個成員分別被引用了 引用的格式是:結構體變量名.結構體成員名
第二步:打印觀察賦值效果
代碼如下:
printf("\\r\\n\\r\\n**********小李的創客實驗室**********\\r\\n\\r\\n");
printf("====================================\\r\\n");
printf("stu1的姓名是:%s\\r\\n", stu1.xingming);
printf("stu1的學號是:%s\\r\\n", stu1.xuehao);
printf("stu1的年齡是:%d\\r\\n", stu1.age);
printf("stu1的分數是:%f\\r\\n", stu1.fenshu);
printf("====================================\\r\\n");
printf("stu2的姓名是:%s\\r\\n", stu2.xingming);
printf("stu2的學號是:%s\\r\\n", stu2.xuehao);
printf("stu2的年齡是:%d\\r\\n", stu2.age);
printf("stu2的分數是:%f\\r\\n", stu2.fenshu);
printf("====================================\\r\\n");
//左滑可以查看全部
輸出結果如下:
第二種方式“->”引用
下面來看第二種常用的引用方法,這種方法經常用做結構體傳參的場合,很多參數需要傳遞的時候,比如在STM32配置串口波特率、停止位、數據位、校驗位、這些參數的時候就會應用到,比較方便只需要一個結構體指針變量就可以訪問結構體的各個成員變量,下面直接來看實例
代碼如下:
void printf_stu(student_t *stu)
{
printf("stu的姓名是:%s\\r\\n", stu- >xingming);
printf("stu的學號是:%s\\r\\n", stu- >xuehao);
printf("stu的年齡是:%d\\r\\n", stu- >age);
printf("stu的分數是:%f\\r\\n", stu- >fenshu);
}
//左滑可以查看全部
這是一個自定義的打印函數,參數是student_t類型的指針,也就是結構體變量的一個地址,調用如下
printf("====================================\\r\\n");
printf_stu(&stu1);
printf("====================================\\r\\n");
printf_stu(&stu2);
//左滑可以查看全部
觀察實驗現象
可以看出,通過傳入函數不同的參數,就可以得到不同的輸出這在很多配置參數的場合就顯得非常重要
舉例說明:
配置C端口參數就是傳入這樣一個結構體變量的地址
第三種方式引用
其實這種方式我感覺不常用,但是有助于理解指針變量的真實含義就是指針變量取內容的操作,取內容和取地址是跟指針緊密相關的知識點這里簡單說一下,以后有時間我們再來詳細探討這里面的細節。
void printf_stu(student_t *stu)
{
printf("stu的姓名是:%s\\r\\n", stu- >xingming);
printf("stu的學號是:%s\\r\\n", stu- >xuehao);
printf("stu的年齡是:%d\\r\\n", stu- >age);
printf("stu的分數是:%f\\r\\n", stu- >fenshu);
}
printf_stu(&stu1);
void printf_stu2(student_t *stu)
{
printf("stu的姓名是:%s\\r\\n", (*stu).xingming);
printf("stu的學號是:%s\\r\\n", (*stu).xuehao);
printf("stu的年齡是:%d\\r\\n", (*stu).age);
printf("stu的分數是:%f\\r\\n", (*stu).fenshu);
}
//左滑可以查看全部
通過以上對比實驗大家可以發現,其實兩種寫法輸出效果是一樣的,這就說明了取內容和取地址是互逆的操作。
總結:不管那一種引用方式都是為了應用、各種方式都有自己的特點,根據應用場景靈活運用才是正道,至于第二種和第三種的區別我個人感覺不大,其實我用的最多的還是第一種哈~
-
STM32
+關注
關注
2258文章
10828瀏覽量
352499 -
C語言
+關注
關注
180文章
7575瀏覽量
134122
發布評論請先 登錄
相關推薦
評論