自定義型別 結構體型別建立 結構體初始化
阿新 • • 發佈:2018-11-02
結構體
結構體的基礎知識:
結構是一些值的集合,這些值稱為成員變數。結構的每個成員可以是不同型別的變數。
結構體的宣告:
struct tag //struct是結構體關鍵字,tag為結構體標籤
{
member-list; //成員列表
}variable-list;//變數列表
例如描寫一個學生
struct Stu
{
char name[20]; //名字
int age;//年齡
char sex[5];//性別
char id[20];//學號
}; //分號不能丟
特殊的宣告
在宣告結構的時候,可以為不完全的宣告。
struct { int a; char b; float c; }x; struct { int a; char b; float c; }a[20],*p;
上面兩個結構在宣告的時候省略了結構體標籤(tag)。
在上面程式碼的基礎上:令 p=&x;是非法的
編譯器會把上面的兩個聲明當成完全不同的兩個型別。所以是非法的。
結構體成員
結構體的成員可以是標量,陣列,指標,甚至是其他結構體。
結構體成員的訪問
1.點( . )操作符
struct S s;
strcpy(s.name, "zhangsan");//使用 . 訪問name成員
s.age = 20;//使用 . 訪問age成員
2.指向(->)操作符
struct S { char name[20]; int age; }s; void print(struct S* ps) { printf("name = %s age = %d\n",(ps->name,ps->age); }
結構的自引用
typedef struct Node
{
int data;
struct Node* next;
}Node;
結構體變數的定義和初始化
有了結構體型別,定義變數就變得很簡單。
struct Point { int x; int y; }p1; //宣告型別的同時定義變數p1 struct Point p2; // 定義結構體變數p2 //初始化:定義變數的同時賦初值。 struct Point p3 = {x, y}; struct Stu // 型別宣告 { char name[15];//名字 int age; // 年齡 }; struct Stu s = {"zhangsan", 20};// 初始化
struct Node
{
int data;
struct Point p;
struct Node* next;
}n1 = {10, {4,5}, NULL}; // 結構體巢狀初始化
struct Node n2 = {20, {5, 6}, NULL};// 結構體巢狀初始化