(四)C语言基础(结构体,联合体,枚举,别名)

本文介绍了C语言中的结构体、联合体和枚举的概念及用法。结构体类似Java的封装类,允许将不同类型的数据组合在一起。联合体则不同,所有字段共用同一块内存空间。枚举提供了定义有限数量的常量类型,并且其值会自动递增。别名则是编译时的声明,用于简化代码编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

八、结构体,联合体

1. 说明

结构体:
- 类似Java中的封装类
联合体:
- 所有字段公用一块内存空间

2. 实例

#include<stdio.h>

/*
联合体,结构体,结构体指针 
*/ 

//定义一个结构体 
struct Student {
    int age;
    float score;
    char sex;
}; 

//定义一个联合体:所有字段公用一块内存空间 
//使用优势:方便类型转换 
union Mix{
    long i; //4byte 
    int k;  //4byte
    char ii;//1btyp
}; 

int main(Void){
    //size data:12 //结构体中总体字段长度  
    printf("size data:%d\n",sizeof(struct Student));
    //size mix: 4 //联合体中最大字段长度 
    printf("size mix: %d\n",sizeof(union Mix));

    /*
    结构体 
    */ 
    //结构体的使用 
    struct Student stu={
        16,90.5,'F'
    }; 
    //age: 16,score: 90.5,sex: F //结构体赋值 
    printf("age: %d,score: %.1f,sex: %c\n",stu.age,stu.score,stu.sex); 
    //结构体赋值
    stu.age = 22;
    //age: 22 //结构体取值
    printf("age: %d\n",stu.age);

    /*
    结构体指针
    */
    struct Student* point = &stu;//一级指针
    struct Student** point2 = &point;//二级指针 
    //一级结构体指针取值,以下两种方式等价 
    //(*point).age: 22 //一级结构体指针取值 
    printf("(*point).age: %d\n",(*point).age);
    //point->age: 22
    printf("  point->age: %d\n",point->age);
    //一级结构体指针赋值
    // point->age: 99 //一级结构体指针赋值 
    point->age = 99;
    printf("  point->age: %d\n",point->age);//  point->age: 99
    //二级结构体指针取值,注意两种方式都要加括号() 
    printf("(**point).age: %d\n",(**point2).age);//(**point).age: 99 
    printf("  *point->age: %d\n",(*point2)->age);//  *point->age: 99
    //二级结构体指针赋值
    //  *point->age: 77
    (*point2)->age = 77;
    printf("  *point->age: %d\n",point->age);

    /* 
    联合体 
    */
    //联合体的使用 
    union Mix m;
    m.i = 100;
    m.k = 123;
    //value m.i = 123 //由于使用同一块内存空间,被后赋值所覆盖
    printf("value m.i = %d\n",m.i);
    //value m.k = 123
    printf("value m.k = %d\n",m.k);

    return 0;
}

九、枚举

1. 说明

  • 有限个类,值自增

2. 实例

#include<stdio.h>
/*
枚举 : 
枚举的值递增
默认首元素为0 
*/

//定义枚举
enum WeekDay{
    Monday = 0,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}; 

int main(void){
    enum WeekDay day = Sunday;
    printf("%d\n",day);//Log: 6 --> 枚举递增 

    return 0;
} 

十、别名

1. 说明

  • 一种编译时处理的声明
  • 用来简化代码编写

2. 实例

#include<stdio.h>

/*
1. 声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的
2. 用来为复杂的声明 定义简单的别名 
3. 在编译阶段处理(区别"#define N 4"是预处理指令)
*/ 

typedef int i;
typedef long l;//如果原有数据类型名字很长,使用别名 

int main(void){
    i a = 10;
    l b = 100;
    printf("a = %d,b = %d",a,b);//a = 10,b = 100
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值