![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauADN28lN2ADM5czMtQmbvB3LcFTMvwFOxAjMvw1ckF2bsBXdvwFduVGdu92YtA3dvwlbj5CNyIXZ2VmcvZmL3d3dvw1LcpDc0RHaiojIsJye.jpg)
結構體
什麼是結構體
結構體是C語言中的一種資料類型,它有如下特點
結構體是一種構造資料類型
把不同類型的資料組合成一個整體來自定義資料類型
結構體的定義方式與結構體變量的聲明
//有名結構體
struct Student{
int num;
char name[30];
} s1;
//匿名結構體
struct Staff{
char name[30];
int sllary;
};
//使用define
#define ds struct DefineStruct
ds{
int i;
};
//使用typedef
typedef struct date{
int year;
int month;
int day;
} Date;
結構體類型與結構體變量
結構體類型與結構體變量概念不同,相當于java中的類,和具體類的執行個體
類型:不配置設定記憶體;變量:配置設定記憶體
類型:不能指派、存取、運算等操作,變量可以
結構體可嵌套,但防止遞歸嵌套
結構體成員名可與程式中變量名相同,不會造成混淆
結構體變量的初始化
//像建立類一樣,先建立結構體,再聲明具體執行個體變量
struct person
{
int num;
char name[20];
};
struct person pf={18,'pf'};
//有點類似于c#中類的初始化器的概念,主要是為了讓代碼更加簡潔
struct animal{
int weight;
char name[20];
} lion={3,'xinba'};
//匿名類+初始化器的形式,再度簡化了代碼
struct {
int height;
char name[20];
} cat{2,"tom"};
結構體變量的引用
這個知識點比較重要,在2017年的真題當中就有涉及,總共有3種引用方式:
struct person
{
int num;
int height;
int age;
};
struct person pf={18,171,200},
*p=&pf;
pf.num=20;//結構體變量名.成員名
p->height=180;//結構體指針名->成員名
(*p).age=300;//(*結構體指針名).成員名
printf("num=%d,weight=%d,age=%d",pf.num,p->height,(*p).age);
共用體
共用體的定義:共用體也叫聯合體,與結構體類似,也是一種構造資料類型,但卻有着不同的行為方式。一般至少由一種資料類型構成,所有成員引用的是記憶體中相同的位置
定義方式如下,我的了解就是把一堆不一樣的類型拼在一起,然後對于這個共用體可以放置成員内的所有類型,如例子中的int,char,float(不恰當的比方就是low一點的泛型)。然後存放變量的時候每次隻能存放一種類型的,并且共用體union的記憶體大小取自成員中占用記憶體最大的那種類型。
union data{
int i;
char ch;
float f;
}a,b;
union data2{
int i;
char ch;
};
union data2 x,y,z,*p,d[3];
union{
int i;
char ch;
}u,v,w;