C语言回顾之结构体、枚举、宏定义、typedef、extern和static的使用

本文回顾了C语言中结构体的定义及其使用步骤,包括如何定义结构体类型和创建结构体变量。同时,文章涵盖了枚举、宏定义、typedef、extern和static等关键概念,深入探讨了它们在C语言编程中的作用。
摘要由CSDN通过智能技术生成



一、结构体

1、什么是结构体

由多个不同类型的数据构成一个整体

2、定义结构体步骤

(1)定义结构体类型

(2)根据结构体类型,定义结构体变量

例如:

#include <stdio.h>

int main()
{
   
    struct Person
    { // 里面的3个变量,可以称为是结构体的成员或者属性
        int age; // 年龄
        double height; // 身高
        char *name; // 姓名
    };
   
    // 2.根据结构体类型,定义结构体变量
    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;
}

3、结构体内存分析
定义结构体类型并不会分配内存,当为结构体类型的变量赋值时才会分配内存
#include <stdio.h>
int main()
{
    struct Student
    {
        int age;// 4个字节
       
        char a;
       
        //char *name; // 8个字节
    };
   
    struct Student stu;
    //stu.age = 20;
    //stu.name = "jack";
    // 补齐算法(对齐算法)
    // 结构体所占用的存储空间 必须是 最大成员字节数的倍数
   
    int s = sizeof(stu);
    printf("%d\n", s);
   
    return 0;
}



4、结构体内存细节
#include <stdio.h>
int main()
{
 // 1.定义结构体类型(并不会分配存储空间)
    struct Date
    {
        int year;
        int month;
        int day;
    };
 
    // 2.定义结构体变量(真正分配存储空间)
    struct Date d1 = {2011, 4, 10};
    struct Date d2 = {2012, 8, 9};
   

    // 会将d1所有成员的值对应地赋值给d2的所有成员
    d2 = d1;
    d2.year = 2010;
   
    printf("%d - %d - %d\n", d1.year, d1.month, d1.day);
   
    printf("%d - %d - %d\n", d2.year, d2.month, d2.day);
    /*
     printf("%p - %p - %p\n", &d1.year, &d1.month, &d1.day);
    
     int s = sizeof(d1);
     printf("%d\n", s);
    
     */
}

}



5、定义结构体的3种方式
(1) 先定义类型,再定义变量(分开定义)
struct Student
{
    int age;
};
struct Student stu;

(2) 定义类型的同时定义变量
struct Student
{
    int age;
} stu;
struct Student stu;

(3) 定义类型的同时定义变量(省略了类型名称)
struct
{
    int age;
} stu;
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值