C語言入門系列-結(jié)構(gòu)體-創(chuàng)新互聯(lián)

C語言入門系列 - 結(jié)構(gòu)體

第一節(jié) C 語言基礎(chǔ)以及基本數(shù)據(jù)類型
第二節(jié) C 語言運(yùn)算符
第三節(jié) C 語言控制語句
第四節(jié) C 語言自定義函數(shù)
第五節(jié) C 語言修飾變量的關(guān)鍵字
第六節(jié) C 語言構(gòu)造數(shù)據(jù)類型–數(shù)組
第七節(jié) C 語言字符串
第八節(jié) C 語言指針
第九節(jié) 指針與函數(shù)、指針函數(shù)、函數(shù)指針
第十節(jié) 數(shù)組與指針、二級指針&NULL&void 指針
第十一節(jié) 結(jié)構(gòu)體

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),畢節(jié)企業(yè)網(wǎng)站建設(shè),畢節(jié)品牌網(wǎng)站建設(shè),網(wǎng)站定制,畢節(jié)網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,畢節(jié)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

文章目錄
  • C語言入門系列 - 結(jié)構(gòu)體
  • 前言
  • 一、結(jié)構(gòu)體是什么?
  • 二、結(jié)構(gòu)體類型
    • 1.聲明結(jié)構(gòu)體類型
    • 2.結(jié)構(gòu)體變量
    • 3.容易混淆的概念
      • 3.1給類型起個別名
      • 3.2在定義結(jié)構(gòu)體的時候直接定義結(jié)構(gòu)體變量或者結(jié)構(gòu)體指針,結(jié)構(gòu)體數(shù)組
    • 4.結(jié)構(gòu)體成員在內(nèi)存中分布
    • 5.結(jié)構(gòu)體變量初始化
    • 6.結(jié)構(gòu)體數(shù)組
      • 6.1結(jié)構(gòu)體數(shù)組定義
      • 6.2結(jié)構(gòu)體數(shù)組初始化
    • 7.結(jié)構(gòu)體指針
    • 8.注意點(diǎn)
  • 總結(jié)


前言

基本數(shù)據(jù)類型
數(shù)組類型
指針類型
結(jié)構(gòu)體也是數(shù)據(jù)類型。

統(tǒng)計(jì)一個班的成績 – 數(shù)組 {620,720,530}
有大有小,按照成績排序-- 最高分,
但是如果需要知道誰是最高分 – 同學(xué)的名字獲取不到。
每一個學(xué)生的成績和姓名放在一起,按照成績排序后,就可以得到這個學(xué)生的名字。
存儲成績 — float 類型
存儲名字 – 字符串 – 字符數(shù)組類


一、結(jié)構(gòu)體是什么?

??結(jié)構(gòu)體就是用來存儲不同數(shù)據(jù)類型的數(shù)據(jù),將某一個物體的屬性抽離出來,保存在一起形成一個整體。
??將學(xué)生主體里面的成績和姓名屬性抽離出來,放在一起形成一個學(xué)生的整體。

二、結(jié)構(gòu)體類型 1.聲明結(jié)構(gòu)體類型

是一種自定義數(shù)據(jù)類型。
??結(jié)構(gòu)體關(guān)鍵字:struct
??結(jié)構(gòu)體起個名字:自定義 Student
??屬性需要使用{}
??{}里面的語法: 屬性類型 屬性名; 屬性名自定義

struct Student
{//成績 -- float 類型
	float score;
	//姓名 -- 字符數(shù)組類型
	char names[21];
};

數(shù)據(jù)類型的名字:struct Student ??類似于 int float char

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

數(shù)據(jù)類型是規(guī)定空間多大。
開空間 – 定義變量。 數(shù)據(jù)類型 變量名
數(shù)據(jù)類型:struct Student

代碼如下(示例):

struct Student s1;
	//開空間的時候會按照里面屬性的順序進(jìn)行分配空間。
	//通過變量定位到屬性,可以采用 點(diǎn)語法 結(jié)構(gòu)體變量.屬性名
	//s1.score
	scanf("%f",&s1.score);
	//s1.names
	scanf("%s",s1.names);
3.容易混淆的概念 3.1給類型起個別名

1、先定義在起別名:
typedef 數(shù)據(jù)類型 別名;

typedef struct Student student;
	//直接使用別名定義變量
	student s1;

2、在定義結(jié)構(gòu)體的時候直接起別名。

//第一種方法
	typedef struct Student
	{float score;
		char names[21];
	}student;
	//第二種方法
	typedef struct
	{float score;
		char names[21];
	}student;
3.2在定義結(jié)構(gòu)體的時候直接定義結(jié)構(gòu)體變量或者結(jié)構(gòu)體指針,結(jié)構(gòu)體數(shù)組
typedef struct Student
	{float score;
		char names[21];
	}s1,s2;		//s1、s2是結(jié)構(gòu)體變量

總結(jié):有 typedef{}后面就是類型名稱,不加 typedef{}后面就

4.結(jié)構(gòu)體成員在內(nèi)存中分布

結(jié)構(gòu)體屬性在內(nèi)存是按照結(jié)構(gòu)體定義的順序進(jìn)行分配空間。
分配的時候遵循字節(jié)對齊的原則。
字節(jié)對齊:
??首先找到占用字節(jié)數(shù)大的成員,以這個成員所占字節(jié)為單位進(jìn)行分配空間。
??成員首地址距離結(jié)構(gòu)體變量的首地址必須保證是成員所占字節(jié)數(shù)的正數(shù)倍。

struct test1
{int a; // 4
	float b; // 4
	short c; // 2
}
//發(fā)現(xiàn)占用空間數(shù)最多的是 4,那么分配空間的時候就是以 4 為單位進(jìn)行分配
printf("%d",sizeof(struct test1)); // 12

struct test2
{char a; // 1
	short b; // 2
	int c; //4
};
printf("%d",sizeof(struct test2)); // 8

在這里插入圖片描述

5.結(jié)構(gòu)體變量初始化

定義變量就給值。

代碼如下(示例):

struct Student s1 = {720,"lili"};
	printf("%f %s",s1.score,s1.names);
6.結(jié)構(gòu)體數(shù)組 6.1結(jié)構(gòu)體數(shù)組定義

數(shù)組:元素?cái)?shù)據(jù)類型 數(shù)組名[元素個數(shù)]

代碼如下(示例):

struct Student
	{float score;
		char names[21];
	};
	struct Student arr[3];
	//第一個結(jié)構(gòu)體 :arr[0] -- arr[0].score arr[0].names
	//第二個結(jié)構(gòu)體: arr[1]
	//第三個結(jié)構(gòu)體: arr[2]
	arr[0].score = 650;	
	// *(arr[0].names) -- char 空間 arr[0].names[0]	就一個char
	strcpy(arr[0].names,"小明");
	printf("%f %s",arr[0].score,arr[0].names);
6.2結(jié)構(gòu)體數(shù)組初始化

代碼如下(示例):

struct Student arr[3] = {{650,"小明"},{530,"小白"},{620,"小蘭"}};
	
	int i;
	for(i=0;i<3;i++)
	{printf("%f %s\n",arr[i].score,arr[i].names);
	}
//怎么獲取結(jié)構(gòu)體數(shù)組的長度? sizeof(arr) / sizeof(struct
7.結(jié)構(gòu)體指針

指針:指向?qū)ο蟮臄?shù)據(jù)類型 *指針名
通過結(jié)構(gòu)體指針操作 指向的結(jié)構(gòu)體成員可以用 ->成員訪問符號

struct Student s1 = {560,“小白”};
struct Student *p;
	p = &s1
//通過結(jié)構(gòu)體指針操作 指向的結(jié)構(gòu)體成員可以用 ->成員訪問符號
printf("%f %s",p->score,p->names);
scanf("%f %s",&p->score,p->names);

結(jié)構(gòu)體指針指向— 動態(tài)申請的地址

struct Student *p = (struct Student *)malloc(sizeof(struct Student))
8.注意點(diǎn)

1、結(jié)構(gòu)體變量除了初始化之外,不能整體賦值
2、可以整體拷貝。
在這里插入圖片描述
在這里插入圖片描述

兩個結(jié)構(gòu)體變量交換值。
代碼如下(示例):

#includestruct Student
{float score;
	char names[21];
};
int main()
{struct Student s1 = {720,"小白"};
	struct Student s2 = {530,"小蘭"}
	struct Student temp;
	temp = s1;
	s1 = s2;
	s2 = temp;
	printf("%f %s\n",s1.score,s1.names);
	printf("%f %s\n",s2.score,s2.names);
	return 0;
}

總結(jié)

??結(jié)構(gòu)體就是用來存儲不同數(shù)據(jù)類型的數(shù)據(jù),將某一個物體的屬性抽離出來,保存在一起形成一個整體。
??是一種自定義數(shù)據(jù)類型。
??結(jié)構(gòu)體關(guān)鍵字:struct
??結(jié)構(gòu)體起個名字:自定義 Student
??屬性需要使用{}
??{}里面的語法: 屬性類型 屬性名; 屬性名自定義
取別名

//第一種方法
typedef struct Student
{
??float score;
??char names[21];
}student;
//第二種方法
typedef struct
{
??float score;
??char names[21];
}student;

直接定義結(jié)構(gòu)體變量

typedef struct Student
	{float score;
		char names[21];
	}s1,s2;		//s1、s2是結(jié)構(gòu)體變量

結(jié)構(gòu)體屬性在內(nèi)存是按照結(jié)構(gòu)體定義的順序進(jìn)行分配空間。
結(jié)構(gòu)體變量除了初始化之外,不能整體賦值。
可以整體拷貝。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

分享標(biāo)題:C語言入門系列-結(jié)構(gòu)體-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://muchs.cn/article16/dcphdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄響應(yīng)式網(wǎng)站、品牌網(wǎng)站建設(shè)、定制開發(fā)外貿(mào)網(wǎng)站建設(shè)、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名