結構體
什么是結構體
結構體是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;