天天看點

java 共用體_結構體與共用體

java 共用體_結構體與共用體

結構體

什麼是結構體

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