在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

C語言_結構體總結

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2022-08-14 09:52 ? 次閱讀

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

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

C語言代碼----->編譯----->鏈接------>可執(zhí)行的二進制文件(windows下xxx.exe)
二進制文件中的數據是如何擺放的? 文本數據段、靜態(tài)數據段、全局數據段。

堆棧空間: 代碼在運行的時候才有的空間。
??臻g: 系統(tǒng)負責申請,負責釋放。比如: 函數形參變量、數組……
堆空間: 程序員負責申請,負責釋放。

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

動態(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("子函數打印:%s\n",str);
		//free(str); //釋放空間
		return str;
	}
	else
	{
		return NULL;
	}
}

int main()
{
	char *p=func();
	printf("主函數打印:%s\n",p);
 	return 0;
}

2. 結構體

2.1 定義語法

結構體的概念: 可存放不同數據類型的集合。
比如: 存放一個班級學生的信息。
可以使用一個結構體存放一個學生的信息。
一個結構體數組存放整個班級的學習信息。
數組的概念: 可存放相同數據類型的集合。

結構體的定義語法:

//聲明一種新類型-----數據類型
struct <結構體的名稱>
{
	<結構體的成員>1;
<結構體的成員>2;
…………
};  //最后有分號結束

struct MyStruct 
{
	char a;
	int b;
	float c;
	char str[100];
};

2.2 定義示例

結構體如何賦值? 如何訪問結構體內部成員

#include "stdio.h"
#include "string.h"
#include 

//定義結構體數據類型
struct MyStruct
{
	char a;
	int b;
	float c;
	char str[100];
};
int main()
{
	struct MyStruct data={'A',123,456.789,"abcd"}; //data就是結構體類型的變量
	//結構體變量訪問內部成員的語法:  . 點運算符
	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 

//定義結構體數據類型
struct MyStruct
{
	char a;
	int b;
	float c;
	char str[100];
}data={'A',123,456.789,"abcd"}; //data就是結構體類型的變量

int main()
{
	//結構體變量訪問內部成員的語法:  . 點運算符
	printf("%c\n",data.a);
	printf("%d\n",data.b);
	printf("%f\n",data.c);
	printf("%s\n",data.str);
 	return 0;
}

2.4 結構體賦值

  //結構體變量訪問內部成員的語法:  . 點運算符
#include "stdio.h"
#include "string.h"
#include 

//定義結構體數據類型
struct MyStruct
{
	char a;
	int b;
	float c;
	char str[100];
}; 

int main()
{
	struct MyStruct data;//data就是結構體類型的變量
	//成員單獨賦值
	data.a='A';
	data.b=123;
	data.c=456.789;
	strcpy(data.str,"abcd"); //數組賦值

	//結構體變量訪問內部成員的語法:  . 點運算符
	printf("%c\n",data.a);
	printf("%d\n",data.b);
	printf("%f\n",data.c);
	printf("%s\n",data.str);
 	return 0;
}

2.5 結構體數組

結構體賦值分為兩種標準:  C89 、C99
?結構體數組
#include "stdio.h"
#include "string.h"
#include 

//定義結構體數據類型
struct MyStruct
{
	char a;
	int b;
	float c;
	char str[100];
}; 

int main()
{
	struct MyStruct data[100];//data就是結構體數組類型變量
	struct MyStruct data2[50];

    //成員單獨賦值
	data[0].a='A';
	data[0].b=123;
	data[0].c=456.789;
	strcpy(data[0].str,"abcd"); //數組賦值

	//結構體變量訪問內部成員的語法:  . 點運算符
	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 結構體指針賦值

#include "stdio.h"
#include "string.h"
#include 
//定義結構體數據類型
struct MyStruct
{
	char a;
	int b;
	float c;
	char str[100];
}; 

int main()
{
	//struct MyStruct buff[100];
	//struct MyStruct *data=buff; //結構體指針類型變量

	struct MyStruct *data=malloc(sizeof(struct MyStruct));
	data->a='A';
	data->b=123;
	data->c=456.789;
	strcpy(data->str,"abcd");

	//結構體指針訪問內部成員的變量 通過  ->  運算符。 
	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)

需求: (每一個功能都是使用函數進行封裝)
1.實現從鍵盤上錄入學生信息。 (姓名、性別、學號、成績、電話號碼)
2.將結構體里的學生信息全部打印出來。
3.實現根據學生的姓名或者學號查找學生,查找到之后打印出學生的具體信息。
4.根據學生的成績對學生信息進行排序。
5.根據學號刪除學生信息。

示例:

#include "stdio.h"
#include "string.h"
#include 

//定義存放學生信息的結構體類型
struct StuDentInfo
{
	char Name[20]; //姓名
	int number;    //學號
	char phone[20];//電話號碼
}; 

//全局變量區(qū)域
unsigned int  StuDentCnt=0; //記錄已經錄入的全部學生數量

//函數聲明區(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;
}

/*
函數功能: 打印學生管理系統(tǒng)的功能列表
*/
void PrintStuDentInfoList(void)
{
	printf("\n--------------學生管理系統(tǒng)功能列表----------------\n");
	printf("1. 錄入學生信息\n");
	printf("2. 根據學號查找學生信息\n");
	printf("3. 根據學號排序\n");
	printf("4. 打印所有學生信息\n");
	printf("5. 刪除指定的學生信息\n");
	printf("請選擇功能序號:");
}

/*
函數功能: 錄入學生信息
*/
void InputStuDentInfo(struct StuDentInfo*info)
{
	printf("輸入學生姓名:");
	scanf("%s",info[StuDentCnt].Name);
	printf("輸入學號:");
	scanf("%d",&info[StuDentCnt].number);
	printf("輸入電話號碼:");
	scanf("%s",info[StuDentCnt].phone);
	StuDentCnt++; //數量自增
}

/*
函數功能: 查找學生信息
*/
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;
			}
		}
	}
}

/*
函數功能: 打印所有學生信息
*/
void PrintStuDentInfo(struct StuDentInfo*info)
{
	int i=0;
	printf("-----------所有學生的信息列表------------\n");
	for(i=0;i

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

    關注

    180

    文章

    7630

    瀏覽量

    140680
  • 結構體
    +關注

    關注

    1

    文章

    130

    瀏覽量

    11059
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    嵌入式C語言知識點總結

    怎么才能做好嵌入式開發(fā)?學好C語言吧!今天就來推薦一篇大佬寫的嵌入式C語言知識點總結。
    發(fā)表于 09-27 09:53 ?1365次閱讀

    漫談C語言結構

      相信大家對于結構體都不陌生。在此,分享出本人對c語言結構體的學習心得。如果你發(fā)現這個總結中有你以前所未掌握的,那本文也算是有點價值了。當
    發(fā)表于 11-15 15:59

    C語言_指針總結_經典講解

    C語言_指針總結_經典講解。
    發(fā)表于 01-06 13:47 ?10次下載

    dxp整體總結

    自己整體做了個簡單整體總結,分享給大家,一個dxp的過程,包括常用的快捷鍵,布線,
    發(fā)表于 08-31 16:28 ?0次下載

    C語言字符串操作總結大全(超詳細)

    本文對c語言字符串的操作進行了詳細的總結分析,需要的朋友可以參考。
    發(fā)表于 11-15 14:19 ?2186次閱讀

    C語言入門教程之順序結構總結的詳細資料概述

    本文檔的主要內容詳細介紹的是C語言入門教程之順序結構總結的詳細資料概述主要內容包括了:1 賦值語句2 數據輸出3 數據輸入4 復合語句和空語句5 程序舉例
    發(fā)表于 10-23 17:53 ?2次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>入門教程之順序<b class='flag-5'>結構</b><b class='flag-5'>總結</b>的詳細資料概述

    C語言入門教程之循環(huán)結構總結的詳細資料概述

    本文檔的主要內容詳細介紹的是C語言入門教程之循環(huán)結構總結的詳細資料概述。主要內容包括了:1 while語句和用while語句構成的循環(huán)結構2
    發(fā)表于 10-23 17:53 ?2次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>入門教程之循環(huán)<b class='flag-5'>結構</b><b class='flag-5'>總結</b>的詳細資料概述

    適合C語言小白看的基礎知識梳理總結

    C語言是當代人學習及生活中的必備基礎知識,應用十分廣泛,下面為大家?guī)?b class='flag-5'>C語言基礎知識梳理總結,C
    的頭像 發(fā)表于 01-04 11:07 ?5003次閱讀

    C語言教程之C基礎變量的技術總結

    本文檔的主要內容詳細介紹的是C語言教程之C基礎變量的技術總結。
    發(fā)表于 01-22 16:18 ?11次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>教程之<b class='flag-5'>C</b>基礎變量的技術<b class='flag-5'>總結</b>

    總結那么幾個C語言中的“坑”

    總結幾個C語言中的“坑”
    的頭像 發(fā)表于 01-16 10:52 ?2850次閱讀

    C語言的拓展歸納總結詳細說明

    本文檔的主要內容詳細介紹的是C語言的拓展歸納總結詳細說明。
    發(fā)表于 07-29 08:00 ?2次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的拓展歸納<b class='flag-5'>總結</b>詳細說明

    嵌入式C語言知識總結

    1 嵌入式C語言總結從語法上來說C語言并不復雜, 但編寫優(yōu)質可靠的嵌入式C程序并非易事,不僅需要
    發(fā)表于 12-20 19:44 ?12次下載
    嵌入式<b class='flag-5'>C</b><b class='flag-5'>語言</b>知識<b class='flag-5'>總結</b>

    C語言C++面試知識點總結

    相對而言,C語言C++相關的面試題比較少見,沒有Java方向寫的人那么多,這是一篇 C 語言C
    的頭像 發(fā)表于 05-12 14:59 ?1666次閱讀

    C語言C++面試知識點總結

    相對而言,C語言C++相關的面試題比較少見,沒有Java方向寫的人那么多,這是一篇 C 語言C
    的頭像 發(fā)表于 05-13 11:59 ?2077次閱讀

    C語言_鏈表總結

    本篇文章介紹C語言鏈表相關知識點,涉及鏈表的創(chuàng)建、單向鏈表、循環(huán)鏈表、雙向鏈表、單向循環(huán)鏈表,鏈表常見問題總結等,還列出了結構體數組與鏈表的練習題,將在下篇文章貼出完整代碼。
    的頭像 發(fā)表于 08-14 09:53 ?2056次閱讀
    主站蜘蛛池模板: 永久免费看mv网站入口 | 三级网址在线 | 中国一级做a爰片久久毛片 中韩日欧美电影免费看 | 亚洲国产成人久久笫一页 | 天堂网在线视频 | 午夜视频网| 女生扒开尿口让男生舔 | 天天干天天插天天操 | 亚洲三级免费观看 | 激情婷婷网 | 99草视频| 亚洲一区二区欧美 | 国内精品久久久久影院免费 | 天天天天做夜夜夜夜做 | 天天影院网 | bt天堂网www连接 | 色窝网| 天堂网资源www | 四虎精品永久在线 | 91成人免费 | 四虎影院国产精品 | 国产欧美一级片 | 色香首页| 色欲情狂 | 艹逼免费视频 | 欧美五月激情 | 国产成人一区二区三中文 | 欧美超级碰碰 | 欧美性猛交xxxx乱大交 | 日本不卡在线一区二区三区视频 | 免费一级毛片在线播放不收费 | 国产色爽女小说免费看 | 五月综合久久 | 国产三级免费观看 | bt在线天堂 | 四虎永久精品免费网址大全 | 国产精品第九页 | 69精品久久久久 | 国产免费播放一区二区三区 | 亚洲一二三区在线观看 | 午夜影院亚洲 |