1. 程式人生 > >C語言學習 18-10-23

C語言學習 18-10-23

1.結構體

  1. 宣告一個結構體

struct NAMENOTE
{
	int id;
	char *name;
	char *tel_num;
};
  1. 對結構體起“別名”

起別名即為使用typedef

typedef struct NAMENOTE
{
	int id;
	char *name;
	char *tel_name;
}NameNote;
  1. 宣告一個結構體變數

(1).struct+結構體名+變數名 = {};
(2).結構體別名+變數名 = {};

struct NAMENOTE c=
{1, "C", "111"}; NameNote python = {2, "python", "222"};
  1. 更改結構體的屬性(結構體中的區域性變數)

類似於python中的字典型別,不過是需要提前申明key值的字典,結構體的初始化相當於給字典的key值賦上value值,因此可對其中每一個屬性進行改值操作。

c.id = 111;
c.tel_num = "110";
  1. 結構體的指標

NameNote *p_c = &c;
NameNote *p_python = &python;

通過指標修改結構體的屬性:

//“笨”方法
(*p_c).id = 111; (*p_c).name = "C_C++"; //結構體指標專有方法 p_c->id = 222; p_c->name = "C++";
  1. 結構體的大小(結構體對齊)

對於一個結構體來說,其中具有各種各樣的基本資料型別,那麼該如何判斷一個結構體型別所佔空間的大小呢?
首先找出該結構體中所佔空間最大的基本資料型別,按每行都具有該基本資料型別所空間大小順序填充,每行不超過最大型別所佔的空間。
比如1中所宣告的結構體,其中佔空間最大(32位)的是int,char *,都為4個位元組,因此該結構體的大小為16位元組。
檢視結構體型別所佔空間可以使用關鍵字sizeof。

例1.struct AA						struct BB
	{								{
		int a;							char a;
		double b;						int b;
		char c;							char c;
		char *d;						char *d;
	};								};

32位系統下。
解:AA中所佔空間最大的基本資料型別是double,為8個位元組,第三行的char c佔一個位元組,char *d佔四個位元組,第三行共有8個位元組,可以裝下c和d,故AA的大小為24位元組;BB中所佔空間最大的基本資料型別是int和char *,且都為4個位元組,故BB佔16位元組空間。

例2:struct CC
	{
		int a;
		int b[5];
		char c;
	};

解:由於int b[5]不是基本資料型別,故最大為int,佔4個位元組,int b[5]共佔20個位元組,char c佔4個位元組,一共28位元組。

經過上面兩個例題可以說明為什麼第六點著重強調基本資料型別