程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言-06復雜數據類型-04 結構體,-06-04

C語言-06復雜數據類型-04 結構體,-06-04

編輯:關於C語言

C語言-06復雜數據類型-04 結構體,-06-04


結構體的說明(構造類型)

數組:只能由多個相同類型的數據構成


結構體:可以由多個不同類型的數據構成 ,結構體的類型是不存在的,自己定義

int main()
{
    // 1.定義結構體類型 定義類型的時候是沒有分配內存的
    struct Person
    { // 裡面的3個變量,可以稱為是結構體的成員或者屬性
        int age; // 年齡
        double height; // 身高
        char *name; // 姓名
    };  //注意分號
    
   // 1.定義結構體類型
    struct Person p = {20, 1.55, "jack"};
    p.age = 30;
    p.name = "rose";
    
    printf("age=%d, name=%s, height=%f\n", p.age, p.name, p.height);
    
    /* 錯誤寫法
    struct Person p2;
    p2 = {30, 1.67, "jake"};
    */
    
    struct Person p2 = {.height = 1.78, .name="jim", .age=30};
    //p2.age = 25;
    
    return 0;
}

 

1.定義結構體變量的3種方式
 1> 先定義類型,再定義變量(分開定義)
 struct Student
 {
    int age;
 };
 struct Student stu;
 
 2> 定義類型的同時定義變量
 struct Student
 {
    int age;
 } stu;
 struct Student stu2;
 
 3> 定義類型的同時定義變量(省略了類型名稱)//無法重用
 struct
 {
    int age;
 } stu;

 結構體數組



int main()
{
    struct RankRecord
    {
        int no; // 序號  4
        char *name; // 名稱 8
        int score; // 積分 4
       
    };
 /*
    struct RankRecord r1 = {1, "jack", 5000};
    struct RankRecord r2 = {2, "jim", 500};
    struct RankRecord r3 = {3, "jake",300};
    */
struct RankRecord records[3] =
    {
        {1, "jack", 5000},
        
        {2, "jim", 500},
        
        {3, "jake",300}
    };
 for (int i = 0; i<3; i++)
    {
        printf("%d\t%s\t%d\n", records[i].no, records[i].name, records[i].score);
    }
    
    return 0;
}

 指向結構體的指針

#include <stdio.h>

/*
 1.指向結構體的指針的定義
 struct Student *p;
 
 2.利用指針訪問結構體的成員
 1> (*p).成員名稱
 2> p->成員名稱
 
 */

int main()
{
    struct Student
    {
        int no;
        int age;
    };
    // 結構體變量
    struct Student stu = {1, 20};
    
    // 指針變量p將來指向struct Student類型的數據
    struct Student *p;
    
    // 指針變量p指向了stu變量
    p = &stu;
    
    p->age = 30;
    
    // 第一種方式
    printf("age=%d, no=%d\n", stu.age, stu.no);
    
    // 第二種方式
    printf("age=%d, no=%d\n", (*p).age, (*p).no);
    
    // 第三種方式 是比較常用的
    printf("age=%d, no=%d\n", p->age, p->no);
    
    
    
    
    return 0;
}

 結構體和函數

#include <stdio.h>
struct Student
{
    int age;
    int no;
};

// 如果結構體作為函數參數,只是將實參結構體所有成員的值對應地賦值給了形參結構體的所有成員
// 修改函數內部結構體的成員不會影響外面的實參結構體
void test(struct Student s)
{
    s.age = 30;
    s.no = 2;
}

// 會影響外面的實參結構體
void test2(struct Student *p)
{
    p->age = 15;
    p->no = 2;

}

void test3(struct Student *p)
{
    struct Student stu2 = {15, 2};
    p = &stu2;
    p->age = 16;
    p->no = 3;
}

int main()
{
    struct Student stu = {28, 1};
    
    //test(stu);
    //test2(&stu);
    test3(&stu);
    
    printf("age=%d, no=%d\n", stu.age, stu.no);
    
    return 0;
}

結構體的嵌套定義

#include <stdio.h>

int main()
{
    struct Date
    {
        int year;
        int month;
        int day;
    };
    
    
    // 類型
    struct Student
    {
        int no; // 學號
        
        struct Date birthday; // 生日
        
        struct Date ruxueDate; // 入學日期
        
        // 這種寫法是錯誤的
        //struct Student stu;
    };
    struct Student stu = {1, {2000, 9, 10}, {2012, 9, 10}};
    
    printf("year=%d,month=%d,day=%d\n", stu.birthday.year, stu.birthday.month, stu.birthday.day);
    
    return 0;
}

 枚舉

#include <stdio.h>

int main()
{
    enum Sex { Man, Woman, Unkown};
    
    // 0男  1女 -1不詳
    //int sex = 3;
    //enum Sex s = Unkown;
    
    // 1.定義枚舉類型
    enum Season
    {
        spring = 1,
        summer,              //枚舉中的值其實都是整型的常量  從0開始 也可以自定義開始值
        autumn,
        winter
    };
    
    // 2.定義枚舉變量
    enum Season s = 100000;  //c語言是弱類型語言,枚舉不正確的值不會報錯
    
    printf("%d\n", s);  //輸出的是整型常量
    
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved