1. 程式人生 > >自定義型別 結構體型別建立 結構體初始化

自定義型別 結構體型別建立 結構體初始化

結構體

結構體的基礎知識:

結構是一些值的集合,這些值稱為成員變數。結構的每個成員可以是不同型別的變數。

結構體的宣告:

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};// 結構體巢狀初始化