C語言學習 18-10-23
阿新 • • 發佈:2018-12-06
1.結構體
struct NAMENOTE
{
int id;
char *name;
char *tel_num;
};
起別名即為使用typedef:
typedef struct NAMENOTE
{
int id;
char *name;
char *tel_name;
}NameNote;
(1).struct+結構體名+變數名 = {};
(2).結構體別名+變數名 = {};
struct NAMENOTE c= {1, "C", "111"};
NameNote python = {2, "python", "222"};
類似於python中的字典型別,不過是需要提前申明key值的字典,結構體的初始化相當於給字典的key值賦上value值,因此可對其中每一個屬性進行改值操作。
c.id = 111;
c.tel_num = "110";
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中所宣告的結構體,其中佔空間最大(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位元組。
經過上面兩個例題可以說明為什麼第六點著重強調基本資料型別。