1.在C語言中,可以使用結構體(Struct)來存放一組不同類型的數據。結構體的定義形式爲:
struct stu{
char * name;
int num;
int age;
}
結構體也是一種數據類型,它由程序員自己定義,可以包含多個其他類型的數據。
結構體是一種自定義的數據類型,是創建變量的模板,不佔用內存空間;結構體變量才包含了實實在在的數據,需要內存空間來存儲。
2.結構體數組
struct stu{
char * name;
int num;
int age;
}class[2] = {
{"xiaohua", 1901, 18},
{"xiaocao", 1902, 19}
}
3.結構體指針
結構體變量名和數組名不同,數組名在表達式中會被轉換爲數組指針,而結構體變量名不會,無論在任何表達式中它表示的都是整個集合本身,要想取得結構體變量的地址,必須在前面加&。
int main()
{
struct stu{
char *name;
int num;
int age;
};
struct stu stu1 = {"xiaohua", 1901, 18};
struct stu *pstu = &stu1;
printf("%s\n", stu1.name);
printf("%s\n", (*pstu).name);
//或者
printf("%s\n", pstu->name);
}
結構體指針獲取結構體成員寫法:
1)(*pstu).name) 2) pstu->name
->是一個新的運算符,可以通過結構體指針直接取得結構體成員;這也是->在C語言中的唯一用途。
4.結構體指針作爲函數參數
結構體變量名代表的是整個集合本身,作爲函數參數時傳遞的整個集合,也就是所有成員,而不是像數組一樣被編譯器轉換成一個指針。如果結構體成員較多,尤其是成員爲數組時,傳送的時間和空間開銷會很大,影響程序的運行效率。所以最好的辦法就是使用結構體指針,這時由實參傳向形參的只是一個地址,非常快速。