0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

結構體成員變量的引用方法123

冬至子 ? 來源:小李的創(chuàng)客實驗室 ? 作者:初出茅廬的小李 ? 2023-07-08 14:45 ? 次閱讀

第一種方式“.”引用

第一步:先定義一個結構體

#pragma pack(1) /*1字節(jié)對齊*/
typedef struct 
{
  char xuehao[20];      //學號
  char xingming[20];    //姓名
  float fenshu;         //分數(shù)
  int age;              //年齡
}student_t;
#pragma pack()/*還原默認對齊*/

這里采用的是常用的typedef關鍵字進行定義結構體類型,可以看到student_t這種數(shù)據(jù)類型里面有4個成員變量,分別是學號、姓名、分數(shù)、年齡,這些成員變量既然是變量就應該滿足變量的基本特征,也就是說可以被賦值,可以被引用,下面直接看代碼

student_t  stu1, stu2;  //此時stu1,stu2為student_t結構體類型的變量
  
  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結構體和stu2結構體的4個成員分別被引用了 引用的格式是:結構體變量名.結構體成員名

第二步:打印觀察賦值效果

代碼如下:

printf("\\r\\n\\r\\n**********小李的創(chuàng)客實驗室**********\\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的分數(shù)是:%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的分數(shù)是:%f\\r\\n", stu2.fenshu);
  printf("====================================\\r\\n");
  //左滑可以查看全部

輸出結果如下:

圖片

第二種方式“->”引用

下面來看第二種常用的引用方法,這種方法經(jīng)常用做結構體傳參的場合,很多參數(shù)需要傳遞的時候,比如在STM32配置串口波特率、停止位、數(shù)據(jù)位、校驗位、這些參數(shù)的時候就會應用到,比較方便只需要一個結構體指針變量就可以訪問結構體的各個成員變量,下面直接來看實例

代碼如下:

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的分數(shù)是:%f\\r\\n", stu- >fenshu);
}
//左滑可以查看全部

這是一個自定義的打印函數(shù),參數(shù)是student_t類型的指針,也就是結構體變量的一個地址,調用如下

printf("====================================\\r\\n");
    printf_stu(&stu1);
    printf("====================================\\r\\n");
    printf_stu(&stu2);
//左滑可以查看全部

觀察實驗現(xiàn)象

圖片

可以看出,通過傳入函數(shù)不同的參數(shù),就可以得到不同的輸出這在很多配置參數(shù)的場合就顯得非常重要

舉例說明:

圖片

配置C端口參數(shù)就是傳入這樣一個結構體變量的地址

第三種方式引用

其實這種方式我感覺不常用,但是有助于理解指針變量的真實含義就是指針變量取內容的操作,取內容取地址是跟指針緊密相關的知識點這里簡單說一下,以后有時間我們再來詳細探討這里面的細節(jié)。

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的分數(shù)是:%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的分數(shù)是:%f\\r\\n", (*stu).fenshu);
}


//左滑可以查看全部

圖片

通過以上對比實驗大家可以發(fā)現(xiàn),其實兩種寫法輸出效果是一樣的,這就說明了取內容取地址是互逆的操作。

總結:不管那一種引用方式都是為了應用、各種方式都有自己的特點,根據(jù)應用場景靈活運用才是正道,至于第二種和第三種的區(qū)別我個人感覺不大,其實我用的最多的還是第一種哈~

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關注

    關注

    2264

    文章

    10854

    瀏覽量

    354294
  • C語言
    +關注

    關注

    180

    文章

    7594

    瀏覽量

    135858
收藏 人收藏

    評論

    相關推薦

    用C語言的結構實現(xiàn)字節(jié)、位操作

    。那么這個應用例將向您介紹一些SPMC75F2413A普遍使用的編程方法。使用結構、聯(lián)合定義位段實現(xiàn)位和字節(jié)的操作。1.2 基本概念結構結構是用同一個名字
    發(fā)表于 09-21 09:25

    C語言結構(struct)常見使用方法

    定義其他同結構變量了——至少我現(xiàn)在沒掌握這種方法。結構
    發(fā)表于 08-23 18:18

    ccs程序在結構后面打上點(.)后結構成員不出現(xiàn)

    在編譯器中定義的結構,在結構后面打上點(.)后,結構
    發(fā)表于 09-29 15:05

    Keil5里結構變量成員名自動補全功能不能用了

    Keil5里結構變量成員名自動補全功能不能用了,結構后按。沒有成員名自動出現(xiàn)的功能了,不知道
    發(fā)表于 10-18 08:53

    漫談C語言結構

    ,若發(fā)現(xiàn)不足之處懇請指出。代碼文件test.c我放在下面。(2)以修改結構成員變量方法代替了函數(shù)(入口參數(shù))的重新定義。  如果說
    發(fā)表于 11-15 15:59

    【干貨】c語言基礎語法——結構

    輸入和輸出;在輸入輸出結構數(shù)據(jù)時,必須分別指明結構變量的各成員;-總結;除開“相同類型的
    發(fā)表于 06-03 17:10

    如何利用C語言取結構成員變量的地址?

    C語言,如何取結構成員變量的地址?發(fā)個列程好嗎?我好研究一下
    發(fā)表于 11-04 03:31

    C語言結構的區(qū)別

    結構在使用其某成員變量時用:結構名.結構
    發(fā)表于 03-24 03:27

    結構變量的定義與使用變量訪問結構成員

    知識點回顧關于找最大公共子串的兩種解題方法結構的定義(3種)結構變量的定義與使用
    發(fā)表于 12-17 07:10

    測試結構成員內存對齊的方式方法

    //測試環(huán)境:keil for ARM//測試目的:通過keil仿真,介紹結構成員對齊方式 #pragma pack ()//定義一個聯(lián)合體類型 struct stru {int a;long b
    發(fā)表于 12-21 07:37

    簡單分析linux內核中的結構使用方法

    結構的使用并不熟練,導致在linux開發(fā)中一頭霧水。下面簡單分析結構的使用方法。1:結構
    發(fā)表于 01-19 08:26

    C語言中的結構指針在訪問的時候怎么讀取成員變量的數(shù)據(jù)?

    C語言中的結構指針在訪問的時候怎么讀取成員變量的數(shù)據(jù)
    發(fā)表于 10-10 07:07

    求助,結構變量定義引用問題求解

    |= mask; } 如以上語句,GPIO_Type是個結構定義,定義了一個*base變量,在引用其中的成員時,是base->I
    發(fā)表于 10-27 06:06

    C語言如何定義結構類型變量

    在定義了結構變量后,系統(tǒng)會為之分配內存單元。根據(jù)結構類型中包含的成員情況,在Visual C
    的頭像 發(fā)表于 03-10 15:35 ?1161次閱讀

    結構成員變量引用方法

    這里默認大家是了解結構這種數(shù)據(jù)類型的,如果不了解可以參考往期相關文章,好了下面開始這次的內容分享
    發(fā)表于 06-23 17:52 ?4711次閱讀
    <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><b class='flag-5'>方法</b>