結(jié)構(gòu)體類型
什么是結(jié)構(gòu)體
我們觀察現(xiàn)實(shí)世界的時(shí)候善镰,可以發(fā)現(xiàn)很多的東西它都是由不同的部分組合起來(lái)的妹萨。比如手機(jī)由電池年枕、屏幕、芯片等很多個(gè)部分組成乎完。同時(shí)對(duì)于一個(gè)電池它又是由很多的其他東西組成熏兄。結(jié)構(gòu)體就是把這些東西組合在一起,進(jìn)行統(tǒng)一的訪問(wèn)和管理树姨∧ν埃可以理解成是對(duì)現(xiàn)實(shí)世界的抽象
結(jié)構(gòu)體不僅可以記錄不同類型的數(shù)據(jù),而且使得數(shù)據(jù)結(jié)構(gòu)是“高內(nèi)聚帽揪,低耦合”的硝清,更利于程序的閱讀理解和移植,而且結(jié)構(gòu)體的存儲(chǔ)方式可以提高CPU對(duì)內(nèi)存的訪問(wèn)速度转晰。
定義結(jié)構(gòu)體
struct 數(shù)據(jù)類型名{
//結(jié)構(gòu)體數(shù)據(jù)成員列表
};
示例
struct Student{
char * name;
char * gender;
char * mail;
int age;
};
聲明結(jié)構(gòu)體變量
方式一
struct Student student芦拿;
方式二
struct Student {
char name[10];
char * gender;
char * mail;
int age;
} stu;
方式三
struct {
char * name;
char * gender;
char * mail;
int age;
} stu;
//之后無(wú)法再繼續(xù)定義變量
結(jié)構(gòu)體變量的初始化
結(jié)構(gòu)體定義時(shí)初始化
struct Student
{
char name[10];
char *gender;
char *mail;
int age;
} student = {"泱澈", "男", "2633218009@qq.com", 21};
變量定義時(shí)初始化
struct Student stu;
// 此時(shí)需要進(jìn)行類型轉(zhuǎn)換
stu = (struct Student){
"泱澈",
"男",
"2633218009@qq.com",
21
};
//部分初始化
struct Student stu = {.name = "泱澈"};
單個(gè)進(jìn)行賦值
//對(duì)數(shù)組類型的數(shù)據(jù)不能直接賦值 例如 stu.name = "泱澈";
strcpy(stu.name,"泱澈");
stu.age = 21;
stu.gender = "男";
結(jié)構(gòu)體變量的使用
我們使用 變量.成員字段 來(lái)使用結(jié)構(gòu)體的數(shù)據(jù)成員
strcpy(stu.name,"泱澈");
stu.age = 21;
stu.gender = "男";
stu.mail = "2633218009@qq.com";
printf("%s\n", stu.name);
printf("%s\n", stu.gender);
printf("%s\n", stu.mail);
printf("%d\n", stu.age);
結(jié)構(gòu)體數(shù)組
語(yǔ)法定義
struct Student{
char * name;
}stu[5];
使用上與單個(gè)結(jié)構(gòu)體變量相同,在數(shù)組中需要加上在數(shù)組中的下標(biāo)
使用示例
#include <stdio.h>
#include<string.h>
struct Student
{
char * name;
};
int main()
{
struct Student stu[2];
stu[0] = (struct Student){"泱澈"};
printf("%s\n", stu[0].name);
return 0;
}
結(jié)構(gòu)體指針
指向結(jié)構(gòu)體類型的指針
使用示例
#include <stdio.h>
#include<string.h>
struct Student
{
char * name;
};
int main()
{
struct Student stu = {"泱澈"};
struct Student * p;
p = &stu;
printf("%s\n", (* p).name);
printf("%s\n", p->name);
return 0;
}
結(jié)構(gòu)體嵌套
一個(gè)結(jié)構(gòu)體當(dāng)中可以包含其他類型的結(jié)構(gòu)體查邢,當(dāng)中自身當(dāng)中不能包含相同類型的結(jié)構(gòu)體蔗崎,但是可以包含執(zhí)行自身的指針
使用示例
#include <stdio.h>
#include<string.h>
struct gender{
char * ch;
};
struct Student
{
char * name;
struct Student * s;
struct gender gen;
};
int main()
{
struct gender gen = {"男"};
struct Student stu = {"泱澈",NULL};
struct Student student = {
"泱澈",
&stu,
gen
};
printf("%s\n", student.name);
printf("%s\n", (student.s)->name);
printf("%s\n", student.gen.ch);
return 0;
}
結(jié)構(gòu)體變量在作為參數(shù)傳遞的時(shí)候使用的是值傳遞
typedef struct 與 struct 的區(qū)別
typedef 關(guān)鍵字可以將一種數(shù)據(jù)類型添加一種別名,例如 typedef int Int;此時(shí)Int 等價(jià)于 int扰藕。在stuck中缓苛,我們定義的別名可以直接用于定義變量,等價(jià)于 struct 類型名邓深。
使用示例
#include <stdio.h>
#include<string.h>
struct gender{
char * ch;
};
typedef struct Student
{
char * name;
struct Student * s;
struct gender gen;
} Stu;
int main()
{
struct gender gen = {"男"};
struct Student stu = {"泱澈",NULL};
struct Student student = {
"泱澈",
&stu,
gen
};
//使用新定義的類型名 定義指針變量 等價(jià)于 struct Student
Stu * s = &student;
printf("%s\n", (*s).name);
printf("%s\n", ((*s).s)->name);
printf("%s\n", (*s).gen.ch);
return 0;
}
enum 枚舉
什么是枚舉
枚舉就是將我們數(shù)據(jù)可能存在的結(jié)果有限個(gè)的羅列出來(lái)未桥。比如一個(gè)人的性別不是男就是女。不會(huì)出現(xiàn)其他的值芥备。這個(gè)時(shí)候我們就可以使用枚舉來(lái)代表
語(yǔ)法示例
#include <stdio.h>
#include<string.h>
enum Gender{
MAN = 1, //不指定值則從 0開(kāi)始
WOMAN = 2 //不指定值則從上一個(gè)定義的值開(kāi)始遞增冬耿,為 2
};
int main()
{
//定義枚舉變量
enum Gender g;
//枚舉變量只可能存在一種值
g = WOMAN;
printf("%d\n",g);
return 0;
}
union 共用體
什么是共用體
共用體內(nèi)部可以定義N個(gè)變量,但是這個(gè)N個(gè)變量之間會(huì)相互影響门躯。共用體的所有成員占用同一段內(nèi)存淆党,修改一個(gè)成員會(huì)影響其余所有成員
語(yǔ)法示例
#include <stdio.h>
#include<string.h>
union Data{
int a;
char b;
short c;
};
int main()
{
union Data d ;
d.a = 46;
printf("%d\n",d.a);
printf("%c\n",d.b);
printf("%d\n",d.c);
printf("-----\n");
d.b = 'a';
printf("%d\n",d.a);
printf("%c\n",d.b);
printf("%d\n",d.c);
printf("-----\n");
d.c = 47;
printf("%d\n",d.a);
printf("%c\n",d.b);
printf("%d\n",d.c);
return 0;
}
/*
運(yùn)行結(jié)果:
46
.
46
-----
97
a
97
-----
47
/
47
*/
以上就是本期的全部?jī)?nèi)容了,非常感謝你能看到這里讶凉,我們下期見(jiàn)染乌!