一. 結(jié)構(gòu)體定義
結(jié)構(gòu)體類型的定義需要用到關(guān)鍵字struct,student是結(jié)構(gòu)體類型名,大括號中的變量聲明表示結(jié)構(gòu)體成員,意思是該結(jié)構(gòu)體將來可以存儲何種類型的數(shù)據(jù).
struct student {
char name[100];
int age;
char sex;
};
在定義結(jié)構(gòu)體類型時使用匿名結(jié)構(gòu)體同時使用typedef對匿名結(jié)構(gòu)體做類型定義
typedef struct {
float x;
float y;
} point;
定義時,可直接調(diào)用point類型聲明變量
二. 結(jié)構(gòu)體賦初值
point p = {20.1,30.1};
其中初始值的個數(shù)與類型必須跟結(jié)構(gòu)體類型成員列表的類型和個數(shù)一致.結(jié)構(gòu)體是一個構(gòu)造類型,如果訪問結(jié)構(gòu)體變量的數(shù)據(jù)時,需要通過點語法連接對應(yīng)結(jié)構(gòu)體變量名和成員去訪問,例如p.x表示p結(jié)構(gòu)體的x值.
math.h頭文件下的函數(shù)?
1. pow(a,x) 計算a的x次方的函數(shù)
2. sqrt(a) 計算根號a的值
3. abs(a) 計算a的絕對值 整型用abs() 浮點型用 fabs()
結(jié)構(gòu)體中如果成員有字符串時,可以使用字符數(shù)組,也可以使用字符指針,但是在對該成員重新賦值時有所區(qū)別,字符數(shù)組描述時重新賦值需要使用strcpy函數(shù)進(jìn)行拷貝,字符指針描述時只需要直接賦值完成指針的重指向.
利用結(jié)構(gòu)體可以直接賦值的操作,可以簡化代碼量,進(jìn)行對數(shù)組直接賦值的操作,不用借助for循環(huán).
三. 嵌套結(jié)構(gòu)體
在結(jié)構(gòu)體聲明后,后結(jié)構(gòu)體中的成員可以用聲明過的結(jié)構(gòu)體聲明的變量.
為結(jié)構(gòu)體的嵌套
四. 結(jié)構(gòu)體所占內(nèi)存計算
為其成員的最大數(shù)據(jù)類型的最小整數(shù)劃分
例如:
typedef struct {
char a;//8
char b;
int c;
long d;//8
char e[20];//24
float f;
} Test;
該計算機(jī)為64位操作系統(tǒng)
即先找出最大類型所占的字節(jié)數(shù),即為long型8位,首先分配8個字節(jié),存取a,b,由于c的類型為int型,剩下6個字節(jié)的后4個正好存儲,d為long再進(jìn)行分配8個字節(jié),e為char類型的數(shù)組,長度為20,但結(jié)構(gòu)體分配內(nèi)存存在內(nèi)存對其規(guī)定,則需要24個字節(jié),f為float類型,正好e數(shù)組剩余4個字節(jié)補(bǔ)進(jìn).
五. 結(jié)構(gòu)體數(shù)組
與整型數(shù)組類似,即為一組相同結(jié)構(gòu)體類型的元素的有序序列.
int a[10] = {0};
point p[10] = {0};
point為上述定義的結(jié)構(gòu)體,即表示為一組具有point類型的元素的數(shù)組,元素個數(shù)為10.
六. 利用結(jié)構(gòu)體直接給數(shù)組直接賦值
typedef struct {
int a[3];
}Array;
Array array = {{1,2,3}};
Array copyArray = array;
通過結(jié)構(gòu)體的性質(zhì),結(jié)構(gòu)體的對象可以進(jìn)行直接賦值操作,即可以進(jìn)行對數(shù)組的直接賦值操作.