C語言基礎十:結構體【重點】

1.引入
    現實世界中的物體要 抽象成 計算機語言中的類型才能被計算機識別
    屬性---->數據類型
    學生:
        學號       int
        性別       char 
        姓名       char name[20]
    自定義類型:結構體、共用體、枚舉
2.結構體
    2.1定義格式
        struct 結構體名
        {
            成員列表 ; // 數據類型  成員變量名
        };
        “結構體名”:C語言合法的標識符即可
         數據類型 :C語言合法的數據類型
         成員變量名:C語言合法的標識符即可
        例子:
            struct student
            {
                int No;
                char sex;
                char name[20];
            };
            struct student stu1;
            struct student表示的是數據類型,stu1表示變量名 
            struct student *stu1;stu1表示指針變量名,struct student表示指針變量要指向的數據類型。
    2.2內存中的存放    
        1.結構體類型所佔的內存是各成員變量的內存之和
        
        ps:1.結構體分配的空間按變量的定義順序各自分配空間
            2.內存對齊,與最長的對齊或者4的整數倍取一個最小
    2.3結構體變量的引用
            struct student stu1;
                1.結構體類型名.成員變量名
                    stu.No=100;
                    int b=stu.No;
                struct student *p;
                2.結構體變量名->成員變量名
                    1)p=&stu1;
                    2)p=(struct student *)malloc(sizeof(stu1));
                       p->No=10;
        
                例:#include<stdio.h>
                    #include<string.h>
                    #include<stdlib.h>
                    struct student
                    {
                        int No;
                        char sex;
                        char name[20];
                    };
                    int main()
                    {
                        struct student stu;
                        stu.No=100;
                        //stu.name="123";
                        strcpy(stu.name,"234");
                        printf("%s\n",stu.name);

                        struct student *p;
                        p=(struct student*)malloc(sizeof(struct student));
                        
                        p->No=10;
                        
                        return 0;
                    }
        
        2.4結構體的初始化
                1.對前面順序的n個進行初始化
                    struct student stu1={11401,'M',"zhangsan"};
                2.對任意進行初始化
                    struct student stu1={
                                        .No=123,
                                        
                                        .name="zhangsan",
                                        .sex='M',
                                        
                        };
                        
                3.結構體數組初始化化
                    struct student stu[5]={ {.name="zhangsan"},{},{},{},{}  };
                    
                    
        2.5 struct 
            {
                int a;
                int b;
            }A,B,C;
            A,B,C爲變量名,類型爲 struct {int a,int b};
            typeof(A) D;
3.聯合體
    union 共用體名
    {
        成員列表;// 成員數據類型  變量名
    };
    例:union a
        {
            char c;
            int a;    
        };
        聯合體分配的空間是最大數據類型長度的空間。
        #include<stdio.h>
        union a
        {
            
            int a;
            char c;
        };
        int main()
        {
            union a da;//union a:表示數據類型  da 變量名
            printf("%d",sizeof(da));//結果爲4   最大類型長度
            return 0;
        }
        大端模式:低地址存高字節的內容,高地址存低字節的內容
        小端模式:低地址存低字節的內容,高地址存高字節的內容
4.枚舉
        把一個變量所有可能的值列舉出來
    
    定義:enum 枚舉名{可能的值};
            
            ps:1.枚舉的值默認爲一個整型常量,默認處理爲0,1,2,3....
               2.枚舉常量mon=4是錯誤的的,不可對它進行改變
               3.enum day{one=8 ,two,three};那麼one後面對應的整型常量就應該爲9  10 ...
                #include<stdio.h>
                enum weekday{mon,tue,wed};
                enum day{one=10 ,two,three};
                int main()
                {

                    enum weekday wd;//enum weekday :數據類型  wd是變量名

                    wd=mon;//mon tue wed默認爲枚舉常量,不可改變
                    wd=4;
                    //mon =5;
                    printf("%d\n",wd);    
                    enum day dy;
                    dy=two;
                    printf("dy=%d\n",dy);
                    return 0;
                }
        ex1.寫一個代碼,判斷是大端模式還是小端模式?
        
        ex2.從屏幕上輸入5個學生成績、學號、姓名,按成績大小輸出學生的成績、姓名、學號
                struct student
                {
                    int grade;
                    int NO;
                    char name[20];//char *name
                };
            1.用scanf輸入 struct student stu[5];
            2.排序
            3.輸出
            
            
            
            
    

            
            
            
            
            
            
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章