C語言_結(jié)構(gòu)體總結(jié)

      網(wǎng)友投稿 671 2022-05-29

      當前文章介紹動態(tài)堆空間內(nèi)存分配與釋放,C語言結(jié)構(gòu)體定義、初始化、賦值、結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體指針的相關知識點,最后通過一個學生管理系統(tǒng)綜合練習結(jié)構(gòu)體數(shù)組的使用。

      1. 動態(tài)內(nèi)存管理

      C語言代碼----->編譯----->鏈接------>可執(zhí)行的二進制文件(windows下xxx.exe)

      二進制文件中的數(shù)據(jù)是如何擺放的? 文本數(shù)據(jù)段、靜態(tài)數(shù)據(jù)段、全局數(shù)據(jù)段。

      堆??臻g: 代碼在運行的時候才有的空間。

      ??臻g: 系統(tǒng)負責申請,負責釋放。比如: 函數(shù)形參變量、數(shù)組……

      堆空間: 程序員負責申請,負責釋放。

      #include //標準庫頭文件 void *malloc(int size); //內(nèi)存申請。 形參表示申請的空間大小,返回值:申請的空間的地址 void free(void *p); //內(nèi)存釋放。 形參就是要釋放的空間首地址。

      動態(tài)空間申請示例。

      動態(tài)空間申請 #include "stdio.h" #include "string.h" #include int main() { int *p=malloc(sizeof(int)); //申請空間 if(p!=NULL) { printf("申請的空間地址: 0x%X\n",p); *p=888; printf("%d\n",*p); } free(p); //釋放空間 return 0; } 示例2: #include "stdio.h" #include "string.h" #include char *func(void) { char*str=malloc(100); //char str[100]; if(str!=NULL) { strcpy(str,"1234567890"); printf("子函數(shù)打印:%s\n",str); //free(str); //釋放空間 return str; } else { return NULL; } } int main() { char *p=func(); printf("主函數(shù)打印:%s\n",p); return 0; }

      2. 結(jié)構(gòu)體

      2.1 定義語法

      結(jié)構(gòu)體的概念: 可存放不同數(shù)據(jù)類型的集合。

      比如: 存放一個班級學生的信息。

      可以使用一個結(jié)構(gòu)體存放一個學生的信息。

      一個結(jié)構(gòu)體數(shù)組存放整個班級的學習信息。

      C語言_結(jié)構(gòu)體總結(jié)

      數(shù)組的概念: 可存放相同數(shù)據(jù)類型的集合。

      結(jié)構(gòu)體的定義語法:

      //聲明一種新類型-----數(shù)據(jù)類型 struct <結(jié)構(gòu)體的名稱> { <結(jié)構(gòu)體的成員>1; <結(jié)構(gòu)體的成員>2; ………… }; //最后有分號結(jié)束 struct MyStruct { char a; int b; float c; char str[100]; };

      2.2 定義示例

      結(jié)構(gòu)體如何賦值? 如何訪問結(jié)構(gòu)體內(nèi)部成員

      #include "stdio.h" #include "string.h" #include //定義結(jié)構(gòu)體數(shù)據(jù)類型 struct MyStruct { char a; int b; float c; char str[100]; }; int main() { struct MyStruct data={'A',123,456.789,"abcd"}; //data就是結(jié)構(gòu)體類型的變量 //結(jié)構(gòu)體變量訪問內(nèi)部成員的語法: . 點運算符 printf("%c\n",data.a); printf("%d\n",data.b); printf("%f\n",data.c); printf("%s\n",data.str); return 0; }

      2.3 初始化

      #include "stdio.h" #include "string.h" #include //定義結(jié)構(gòu)體數(shù)據(jù)類型 struct MyStruct { char a; int b; float c; char str[100]; }data={'A',123,456.789,"abcd"}; //data就是結(jié)構(gòu)體類型的變量 int main() { //結(jié)構(gòu)體變量訪問內(nèi)部成員的語法: . 點運算符 printf("%c\n",data.a); printf("%d\n",data.b); printf("%f\n",data.c); printf("%s\n",data.str); return 0; }

      2.4 結(jié)構(gòu)體賦值

      //結(jié)構(gòu)體變量訪問內(nèi)部成員的語法: . 點運算符 #include "stdio.h" #include "string.h" #include //定義結(jié)構(gòu)體數(shù)據(jù)類型 struct MyStruct { char a; int b; float c; char str[100]; }; int main() { struct MyStruct data;//data就是結(jié)構(gòu)體類型的變量 //成員單獨賦值 data.a='A'; data.b=123; data.c=456.789; strcpy(data.str,"abcd"); //數(shù)組賦值 //結(jié)構(gòu)體變量訪問內(nèi)部成員的語法: . 點運算符 printf("%c\n",data.a); printf("%d\n",data.b); printf("%f\n",data.c); printf("%s\n",data.str); return 0; }

      2.5 結(jié)構(gòu)體數(shù)組

      結(jié)構(gòu)體賦值分為兩種標準: C89 、C99 ?結(jié)構(gòu)體數(shù)組 #include "stdio.h" #include "string.h" #include //定義結(jié)構(gòu)體數(shù)據(jù)類型 struct MyStruct { char a; int b; float c; char str[100]; }; int main() { struct MyStruct data[100];//data就是結(jié)構(gòu)體數(shù)組類型變量 struct MyStruct data2[50]; //成員單獨賦值 data[0].a='A'; data[0].b=123; data[0].c=456.789; strcpy(data[0].str,"abcd"); //數(shù)組賦值 //結(jié)構(gòu)體變量訪問內(nèi)部成員的語法: . 點運算符 printf("%c\n",data[0].a); printf("%d\n",data[0].b); printf("%f\n",data[0].c); printf("%s\n",data[0].str); return 0; }

      2.6 結(jié)構(gòu)體指針賦值

      #include "stdio.h" #include "string.h" #include //定義結(jié)構(gòu)體數(shù)據(jù)類型 struct MyStruct { char a; int b; float c; char str[100]; }; int main() { //struct MyStruct buff[100]; //struct MyStruct *data=buff; //結(jié)構(gòu)體指針類型變量 struct MyStruct *data=malloc(sizeof(struct MyStruct)); data->a='A'; data->b=123; data->c=456.789; strcpy(data->str,"abcd"); //結(jié)構(gòu)體指針訪問內(nèi)部成員的變量 通過 -> 運算符。 printf("%c\n",data->a); printf("%d\n",data->b); printf("%f\n",data->c); printf("%s\n",data->str); return 0; }

      3. 學生管理系統(tǒng)

      作業(yè): 學生管理系統(tǒng)

      需求: (每一個功能都是使用函數(shù)進行封裝)

      1.實現(xiàn)從鍵盤上錄入學生信息。 (姓名、性別、學號、成績、電話號碼)

      2.將結(jié)構(gòu)體里的學生信息全部打印出來。

      3.實現(xiàn)根據(jù)學生的姓名或者學號查找學生,查找到之后打印出學生的具體信息。

      4.根據(jù)學生的成績對學生信息進行排序。

      5.根據(jù)學號刪除學生信息。

      示例:

      #include "stdio.h" #include "string.h" #include //定義存放學生信息的結(jié)構(gòu)體類型 struct StuDentInfo { char Name[20]; //姓名 int number; //學號 char phone[20];//電話號碼 }; //全局變量區(qū)域 unsigned int StuDentCnt=0; //記錄已經(jīng)錄入的全部學生數(shù)量 //函數(shù)聲明區(qū)域 void PrintStuDentInfoList(void); void InputStuDentInfo(struct StuDentInfo*info); void FindStuDentInfo(struct StuDentInfo*info); void SortStuDentInfo(struct StuDentInfo*info); void PrintStuDentInfo(struct StuDentInfo*info); int main() { struct StuDentInfo data[100]; //可以100位學生的信息 int number; while(1) { PrintStuDentInfoList(); //打印功能列表 scanf("%d",&number); printf("\n"); switch(number) { case 1: InputStuDentInfo(data); break; case 2: FindStuDentInfo(data); break; case 3: SortStuDentInfo(data); break; case 4: PrintStuDentInfo(data); break; case 5: break; default: printf("選擇錯誤!\n\n"); break; } } return 0; } /* 函數(shù)功能: 打印學生管理系統(tǒng)的功能列表 */ void PrintStuDentInfoList(void) { printf("\n--------------學生管理系統(tǒng)功能列表----------------\n"); printf("1. 錄入學生信息\n"); printf("2. 根據(jù)學號查找學生信息\n"); printf("3. 根據(jù)學號排序\n"); printf("4. 打印所有學生信息\n"); printf("5. 刪除指定的學生信息\n"); printf("請選擇功能序號:"); } /* 函數(shù)功能: 錄入學生信息 */ void InputStuDentInfo(struct StuDentInfo*info) { printf("輸入學生姓名:"); scanf("%s",info[StuDentCnt].Name); printf("輸入學號:"); scanf("%d",&info[StuDentCnt].number); printf("輸入電話號碼:"); scanf("%s",info[StuDentCnt].phone); StuDentCnt++; //數(shù)量自增 } /* 函數(shù)功能: 查找學生信息 */ void FindStuDentInfo(struct StuDentInfo*info) { int num,i; printf("輸入查找的學號:"); scanf("%d",&num); for(i=0; iinfo[j+1].number) { tmp=info[j]; info[j]=info[j+1]; info[j+1]=tmp; } } } } /* 函數(shù)功能: 打印所有學生信息 */ void PrintStuDentInfo(struct StuDentInfo*info) { int i=0; printf("-----------所有學生的信息列表------------\n"); for(i=0;i

      C 語言 數(shù)據(jù)結(jié)構(gòu)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:python跨年表白神器--你值得擁有!
      下一篇:HDFS的高級特性
      相關文章
      久久综合久久综合亚洲| 亚洲中文无码mv| 麻豆亚洲AV成人无码久久精品 | 亚洲第一成年网站视频| 亚洲乱码一二三四区麻豆| 亚洲国产电影在线观看| 亚洲美女视频一区| 亚洲精品视频免费在线观看| 亚洲AV无码一区二区二三区入口| 亚洲成AV人片一区二区| 亚洲AV无码专区电影在线观看| 情人伊人久久综合亚洲| 亚洲成A人片在线观看无码不卡| 亚洲成AV人片一区二区密柚| 亚洲国产人成网站在线电影动漫| 亚洲国产高清在线| 久久亚洲国产精品成人AV秋霞 | 国产偷国产偷亚洲清高APP| 亚洲AV无码一区二区乱子仑 | 亚洲色偷偷偷综合网| 亚洲av永久无码一区二区三区| 亚洲AV无码成人精品区狼人影院| 日韩欧美亚洲中文乱码| 国产亚洲蜜芽精品久久| 亚洲人成人网站在线观看| 亚洲熟女乱综合一区二区| 亚洲夜夜欢A∨一区二区三区| 亚洲日韩精品一区二区三区无码| 国产A在亚洲线播放| 亚洲小视频在线观看| 亚洲成人福利网站| 国产成人亚洲综合一区| 18禁亚洲深夜福利人口| 亚洲精品无码日韩国产不卡?V| 亚洲综合另类小说色区| 亚洲国产精品第一区二区| 亚洲无限乱码一二三四区| 亚洲日韩国产精品乱-久| 久久精品国产亚洲AV未满十八 | 亚洲AV无码一区二区三区国产 | 亚洲国产熟亚洲女视频|