第一節(jié) C 語(yǔ)言基礎(chǔ)以及基本數(shù)據(jù)類型
第二節(jié) C 語(yǔ)言運(yùn)算符
第三節(jié) C 語(yǔ)言控制語(yǔ)句
第四節(jié) C 語(yǔ)言自定義函數(shù)
第五節(jié) C 語(yǔ)言修飾變量的關(guān)鍵字
第六節(jié) C 語(yǔ)言構(gòu)造數(shù)據(jù)類型–數(shù)組
第七節(jié) C 語(yǔ)言字符串
第八節(jié) C 語(yǔ)言指針
第九節(jié) 指針與函數(shù)、指針函數(shù)、函數(shù)指針
第十節(jié) 數(shù)組與指針、二級(jí)指針&NULL&void 指針
第十一節(jié) 結(jié)構(gòu)體
基本數(shù)據(jù)類型
數(shù)組類型
指針類型
結(jié)構(gòu)體也是數(shù)據(jù)類型。
統(tǒng)計(jì)一個(gè)班的成績(jī) – 數(shù)組 {620,720,530}
有大有小,按照成績(jī)排序-- 最高分,
但是如果需要知道誰(shuí)是最高分 – 同學(xué)的名字獲取不到。
每一個(gè)學(xué)生的成績(jī)和姓名放在一起,按照成績(jī)排序后,就可以得到這個(gè)學(xué)生的名字。
存儲(chǔ)成績(jī) — float 類型
存儲(chǔ)名字 – 字符串 – 字符數(shù)組類
??結(jié)構(gòu)體就是用來(lái)存儲(chǔ)不同數(shù)據(jù)類型的數(shù)據(jù),將某一個(gè)物體的屬性抽離出來(lái),保存在一起形成一個(gè)整體。
??將學(xué)生主體里面的成績(jī)和姓名屬性抽離出來(lái),放在一起形成一個(gè)學(xué)生的整體。
是一種自定義數(shù)據(jù)類型。
??結(jié)構(gòu)體關(guān)鍵字:struct
??結(jié)構(gòu)體起個(gè)名字:自定義 Student
??屬性需要使用{}
??{}里面的語(yǔ)法: 屬性類型 屬性名; 屬性名自定義
struct Student
{//成績(jī) -- 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;
//開空間的時(shí)候會(huì)按照里面屬性的順序進(jìn)行分配空間。
//通過(guò)變量定位到屬性,可以采用 點(diǎn)語(yǔ)法 結(jié)構(gòu)體變量.屬性名
//s1.score
scanf("%f",&s1.score);
//s1.names
scanf("%s",s1.names);
3.容易混淆的概念
3.1給類型起個(gè)別名1、先定義在起別名:
typedef 數(shù)據(jù)類型 別名;
typedef struct Student student;
//直接使用別名定義變量
student s1;
2、在定義結(jié)構(gòu)體的時(shí)候直接起別名。
//第一種方法
typedef struct Student
{float score;
char names[21];
}student;
//第二種方法
typedef struct
{float score;
char names[21];
}student;
3.2在定義結(jié)構(gòu)體的時(shí)候直接定義結(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)行分配空間。
分配的時(shí)候遵循字節(jié)對(duì)齊的原則。
字節(jié)對(duì)齊:
??首先找到占用字節(jié)數(shù)大的成員,以這個(gè)成員所占字節(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,那么分配空間的時(shí)候就是以 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ù)組名[元素個(gè)數(shù)]
代碼如下(示例):
struct Student
{float score;
char names[21];
};
struct Student arr[3];
//第一個(gè)結(jié)構(gòu)體 :arr[0] -- arr[0].score arr[0].names
//第二個(gè)結(jié)構(gòu)體: arr[1]
//第三個(gè)結(jié)構(gòu)體: arr[2]
arr[0].score = 650;
// *(arr[0].names) -- char 空間 arr[0].names[0] 就一個(gè)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ù)組的長(zhǎng)度? sizeof(arr) / sizeof(struct
7.結(jié)構(gòu)體指針指針:指向?qū)ο蟮臄?shù)據(jù)類型 *指針名
通過(guò)結(jié)構(gòu)體指針操作 指向的結(jié)構(gòu)體成員可以用 ->成員訪問(wèn)符號(hào)
struct Student s1 = {560,“小白”};
struct Student *p;
p = &s1
//通過(guò)結(jié)構(gòu)體指針操作 指向的結(jié)構(gòu)體成員可以用 ->成員訪問(wèn)符號(hào)
printf("%f %s",p->score,p->names);
scanf("%f %s",&p->score,p->names);
結(jié)構(gòu)體指針指向— 動(dòng)態(tài)申請(qǐng)的地址
struct Student *p = (struct Student *)malloc(sizeof(struct Student))
8.注意點(diǎn)1、結(jié)構(gòu)體變量除了初始化之外,不能整體賦值
2、可以整體拷貝。
兩個(gè)結(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é)構(gòu)體就是用來(lái)存儲(chǔ)不同數(shù)據(jù)類型的數(shù)據(jù),將某一個(gè)物體的屬性抽離出來(lái),保存在一起形成一個(gè)整體。
??是一種自定義數(shù)據(jù)類型。
??結(jié)構(gòu)體關(guān)鍵字:struct
??結(jié)構(gòu)體起個(gè)名字:自定義 Student
??屬性需要使用{}
??{}里面的語(yǔ)法: 屬性類型 屬性名; 屬性名自定義
取別名
//第一種方法
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級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享標(biāo)題:C語(yǔ)言入門系列-結(jié)構(gòu)體-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://jinyejixie.com/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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容