中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中結構體的使用方法

發布時間:2021-09-02 23:04:15 來源:億速云 閱讀:194 作者:chen 欄目:開發技術

這篇文章主要講解了“C語言中結構體的使用方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C語言中結構體的使用方法”吧!

目錄
  • C 語言結構體使用

    • 1. 結構體的聲明和定義

      • 1.1 介紹

      • 1.2定義的幾種類型

    • 2. 結構體初始化

      • 3. 結構體成員訪問

        • 3.1 成員介紹

          • 4. 結構體傳參

          C 語言結構體使用

          1. 結構體的聲明和定義

          1.1 介紹
          • 我們知道數組是同種類型值的集合,而結構就是可以將不同類型的值放在一起。

          • 結構是一些值的集合,這些值稱為成員變量。結構的每個成員可以是不同類型的變量。

          • 結構的成員可以是標量、數組、指針,甚至是其他結構體。

          如我們可以將一個學生的一些屬性放在一起

          struct stu//定義一個結構體類型,就如int、char,struct stu是我們定義的結構體類型
          {
              //成員變量
              char name[20];//名字
              int age;//歲數
              char id[20];//學號
          };
          int main()
          {
              struct stu a;//定義一個struct stu類型的變量a,而對象a中就包含了名字,歲數,學號的屬性
          }
          1.2定義的幾種類型

          類型1:

          struct stu
          {
              char name[20];
              int age;
          };
          int main()
          {
              struct stu a;//定義局部變量a
          }

          類型2:

          struct stu
          {
              char name[20];
              int age;
          }s1,s2;//定義全局變量s1,s2

          2. 結構體初始化

          代碼如下:

          struct book
          {
             float height;
             char name[20];
          }b;
          struct stu
          {
              char name[20];
              int age;
              char id[20];
              struct book b;
          };
          int main()
          {
              //初始化時,其實是和數組初始化一樣,用大括號,里面放上初始化的值。若結構體里面包含結構體,則大括號里面 //在放一個大括號,里面放內部結構體初始化的值
              
              struct stu a={"bobo",18,"2021520",{15.8,"free"}};
          }

          3. 結構體成員訪問

          3.1 成員介紹

          • 結構變量的成員是通過點操作符(.)訪問的。點操作符接受兩個操作數,如:m.n(m為結構體變量,n為結構體中你想要訪問的成員變量)

          • 指向一個結構體的指針訪問指向變量的成員是通過操作符(->)訪問的。 如:m->n(m為指向一個結構體的指針,n為結構體中你想要訪問的成員變量),也可以(*m).n

          struct book
          {
             float height;
             char name[20];
          }b;
          struct stu
          {
              char name[20];
              int age;
              char id[20];
              struct book b;
          };
          int main()
          {
              struct stu a={"bobo",18,"2021520",{15.8,"free"}};
              //法一
              printf("%s\n",a.name);
              printf("%d\n",a.age);
              printf("%.1f\n",a.b.height);//若訪問結構體中的結構體中的一個成員,先訪問到內部的結構體,再訪問內部結構體中的成員
              
              //法二
              struct stu* pa=&a;
              printf("%s\n",pa->name);
              printf("%d\n",pa->age);
              printf("%.1f\n",pa->b.height);
              
              //法三
              printf("%s\n",(*pa).name);
              printf("%d\n",(*pa).age);
              printf("%.1f\n",(*pa).b.height);
          }

          4. 結構體傳參

          注意:

          結構體傳參的時候,要傳結構體的地址更好

          代碼如下:

          struct book
          {
             float height;
             char name[20];
          }b;
          struct stu
          {
              char name[20];
              int age;
              char id[20];
              struct book b;
          };
          void print1(struct stu p)
          {
              printf("%s %d %s %.1f %s",p.name,p.age,p.id,p.b.height,p.b.name);
          }
          void print2(struct stu* pa)
          {
              printf("%s %d %s %.1f %s",pa->name,pa->age,pa->id,pa->b.height,pa->b.name);
          }
          int main()
          {
              struct stu a={"bobo",18,"2021520",{15.8,"free"}};
              
              //寫一個函數打印a的內容
              
              print1(a);//結果為:bobo 18 2021520 15.8 free(正常打印)
              
              //再寫一個函數,通過傳a的地址打印a的內容
              
              print2(&a);//結果為:bobo 18 2021520 15.8 free(正常打印)
              
              return 0;
          }

          那么傳值和傳址有什么不同,哪個更好呢?(首選傳址

          • 傳參時,其實是對實參的一份拷貝,是會開辟一塊空間來存儲實參。傳值,是將整個實參拷貝過去,而傳地址,傳過去的只是地址,傳參的效率更高一些。

          • 函數傳參的時候,參數是需要壓棧的。 如果傳遞一個結構體對象的時候,結構體過大,參數壓棧的的系統開銷比較大,所以會導致性能的下降。

          那么什么是函數調用的參數壓棧呢?

          棧:一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表

          特點:先進的后出,后進的先出。(先進入的數據被壓入棧底,最后的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最后一個數據被第一個讀出來))

          壓棧:給棧里存數據

          C語言中結構體的使用方法

          • 每一個函數的調用都會在內存的棧區上開辟一塊空間,并且數據都會如壓棧一樣一個一個的存放進棧區,如果數據比較多、大時,參數壓棧就比較吃力,所以導致性能就會下降。

          感謝各位的閱讀,以上就是“C語言中結構體的使用方法”的內容了,經過本文的學習后,相信大家對C語言中結構體的使用方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

          向AI問一下細節

          免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

          AI

          威远县| 昆山市| 松桃| 鄂伦春自治旗| 赣州市| 青铜峡市| 义马市| 新民市| 东城区| 新宁县| 阿克苏市| 定远县| 南部县| 安康市| 潞西市| 丰宁| 长海县| 响水县| 盐城市| 长葛市| 阿城市| 江陵县| 当涂县| 资讯| 大埔县| 根河市| 屯昌县| 武威市| 贞丰县| 武安市| 东乌珠穆沁旗| 苍梧县| 无锡市| 芦山县| 阜新市| 蒲江县| 合川市| 江源县| 弥渡县| 买车| 赤壁市|