結構體與共用體


結構體

什么是結構體

結構體是C語言中的一種數據類型,它有如下特點

  1. 結構體是一種構造數據類型
  2. 把不同類型的數據組合成一個整體來自定義數據類型

結構體的定義方式與結構體變量的聲明

//有名結構體 
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中的類,和具體類的實例

  1. 類型:不分配內存;變量:分配內存
  2. 類型:不能賦值、存取、運算等操作,變量可以
    結構體可嵌套,但防止遞歸嵌套
    結構體成員名可與程序中變量名相同,不會造成混淆

結構體變量的初始化

//像創建類一樣,先創建結構體,再聲明具體實例變量 
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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM