網站首頁 編程語言 正文
1.1: 結構體用來干嘛?
生活中我們會遇到很多的表格,就比如你的學習成績表,有姓名 ,學號,各科的成績,總的成績等等,這是一些不同的數據類型,我們要是在c語言中想同時使用這些不同的數據怎么辦呢? 可以使用結構體變量,結構體變量在c語言中是一種構造類型的數據,顧名思義,它跟基本的如int這種原子類型的變量不同.可以把他看作這些基本變量的集合.
1.2:結構體變量的基本定義格式
struct 結構體名 { <基本類型名> <成員變量名>; <基本類型名> <成員變量名>; <基本類型名> <成員變量名>; };
注意:struct 是關鍵字是結構體類型的說明標識符,不能省略,結構體名可以省略,我們在使用 typedef struct 時就省略了就不寫結構體名
1.3:結構體變量的定義
(我們也可以在創建結構體的時候聲明變量這里不再贅述,提一下我對結構體變量的理解:首先結構體就是一個各種基本數據類型的集合,而就結構體變量就像我們定義一個集合s={1,2,3,4},s就相當于一個結構體變量,結構體變量包含結構體中的各個成員變量,我們可以對成員變量進行引用,操作....)
struct 結構體名 a, b; //定義了兩個結構體變量 strcut 結構體名 S[4]; //定義一個結構體變量數組,有四個元素 strcut 結構體名* p = &a; //定義一個結構體指針,指向結構體變量a
1.4結構體變量的三種引用方法
結構體變量.成員名 (*結構體指針).成員名 結構體指針->成員名 //使用指針的時候推薦使用這一種,因為在數據結構中,很多這種引用方式
2.結構體變量的使用(直接使用結構體變量)
#include <stdio.h> /*結構體的使用*/ int main() { struct job_exam //定義一個job_exam的結構體 { unsigned num; //學號 char name[10]; //姓名 char gread_class[10]; //班級 int EngLish; //英語成績 int Chinese; //語文成績 int Match; //數學成績 int Sum_Exam; //總成績 }; struct job_exam Most_Exam_Student; //結構體變量用來存放成績最高的同學的信息 struct job_exam SomeStudent_news[4] = { {1901,"隴軍","3-2班",100,100,78},{1902,"李華","3-2班",99,99,88}, {1903,"李明","3-2班",99,98,90},{1903,"李光","3-2班",99,98,80}}; //結構體數組用來輸入4名同學的信息 for (int i = 0; i < 4; i++) //依次計算每一位同學的總成績 { SomeStudent_news[i].Sum_Exam = SomeStudent_news[i].EngLish + SomeStudent_news[i].Chinese + SomeStudent_news[i].Match; } Most_Exam_Student = SomeStudent_news[0]; //假使第一個學生的成績最高 if (Most_Exam_Student.Sum_Exam < SomeStudent_news[1].Sum_Exam) { Most_Exam_Student = SomeStudent_news[1]; } else if (Most_Exam_Student.Sum_Exam < SomeStudent_news[2].Sum_Exam) { Most_Exam_Student = SomeStudent_news[2]; } else { Most_Exam_Student = SomeStudent_news[3]; } printf("總成績最高學生的信息為:\n"); printf(" 編號 姓名 班級 英語 語文 數學 總成績\n"); printf("%6u %7s %7s %6d %6d %6d %6d",Most_Exam_Student.num,Most_Exam_Student.name,Most_Exam_Student.gread_class,Most_Exam_Student.EngLish,Most_Exam_Student.Chinese,Most_Exam_Student.Match,Most_Exam_Student.Sum_Exam); }
2.1輸出結果
當用結構體變量作為函數參數進行整體傳送時,要將全部成員逐個進行傳送,當成員中有數組時,會使傳送的時間和空間開銷都很大嚴重降低程序的效率,所以我們一般在使用時不直接傳送結構體變量,而是傳送結構體變量的地址,減少時間課空間的開銷
3.使用結構體指針操作,返回總成績最低的學生信息
#include <stdio.h> /*結構體的使用*/ int Find_Sumexam(struct job_exam* pa); //函數聲明 struct job_exam //定義一個全局job_exam的結構體 { unsigned num; //學號 char name[10]; //姓名 char gread_class[10]; //班級 int EngLish; //英語成績 int Chinese; //語文成績 int Match; //數學成績 int Sum_Exam; //總成績 }; struct job_exam SomeStudent_news[4] = { {1901,"隴軍","3-2班",100,100,78},{1902,"李華","3-2班",99,99,88}, //結構體數組用來輸入4名同學的信息 {1903,"李明","3-2班",99,98,90},{1903,"李光","3-2班",99,98,80} }; int main() { struct job_exam Most_Exam_Student; //結構體變量用來存放成績最高的同學的信息 for (int i = 0; i < 4; i++) //依次計算每一位同學的總成績 { SomeStudent_news[i].Sum_Exam = SomeStudent_news[i].EngLish + SomeStudent_news[i].Chinese + SomeStudent_news[i].Match; } Find_Sumexam(&Most_Exam_Student); //函數調用 printf("總成績最低學生的信息為:\n"); printf(" 編號 姓名 班級 英語 語文 數學 總成績\n"); printf("%6u %7s %7s %6d %6d %6d %6d",Most_Exam_Student.num,Most_Exam_Student.name,Most_Exam_Student.gread_class,Most_Exam_Student.EngLish,Most_Exam_Student.Chinese,Most_Exam_Student.Match,Most_Exam_Student.Sum_Exam); } int Find_Sumexam(struct job_exam* pa) //定義一個返回最高學生信息的函數 { *pa = SomeStudent_news[0]; //假使第一個學生的總成績最高 for (int i = 1; i < 4; i++) { if (pa->Sum_Exam > SomeStudent_news[i].Sum_Exam) { *pa = SomeStudent_news[i]; //這樣的化只需要找到最高一個學生的地址返回他的信息就可以了 } } return 0; }
3.1運行結果
總結:
結構體沒有什么神奇的就是,一個集合里面包含了各種數據類型,我們想用什么加個.就可以拿出來用,本質和基本的數據類型沒有什么區別,歡迎大家來評論區指出有問題的地方
原文鏈接:https://blog.csdn.net/weixin_50815545/article/details/122181157
相關推薦
- 2022-10-25 在IIS上部署Go?API項目_win服務器
- 2022-06-02 Android?Spinner和GridView組件的使用示例_Android
- 2022-08-13 Spring中@Bean注解的作用以及如何使用
- 2022-06-18 Android實現歷史搜索記錄_Android
- 2022-05-08 一起來練習C++的指針_C 語言
- 2022-04-19 c#中token的使用方法實例_C#教程
- 2023-01-19 C++深度探索虛函數覆蓋示例_C 語言
- 2022-06-04 C語言超詳細講解輪轉數組_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支