C语言-结构体

本文详细介绍了C语言中的结构体,包括结构体的定义、如何声明和初始化结构体变量,以及在栈上和堆上创建结构体变量的方法。通过实例展示了结构体在存储学生信息和员工信息等方面的应用,帮助读者深入理解C语言中复合类型的概念。

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

一、简介结构体

结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构
例如一个学生的信息就需要学号(字符串),姓名(字符串),年龄(整形)等等。

结构体:使用结构体,实现自定义类型
结构体是一个复合类型
定义结构体,用struct关键字,记得要在大括号后面写分号

二、结构体的定义

定义结构体,用struct关键字

struct Person
{
	int age;
	char name[64];
	char sex[64];
};

调用结构体
第一种方法

    // 
	struct Person p; //使用person类型定义出一个变量叫做p 
    p.age = 18;
    strcpy(p.name,"张无忌");
    strcpy(p.sex,"男");
    printf("name=%s\nsex=%s\nage=%d\n",p.name,p.sex,p.age);

第二种方法

    // 
    struct Person x = {28,"史密斯","男"};
    printf("name=%s\nsex=%s\nage=%d\n",x.name,x.sex,x.age);

第三种方法,定以时直接声明一个全局变量,一共使用。变量的内容可以在这里写,也可以在后面写

struct Emp
{
    /* data */
    int em_id;char name[250];double salary;int number;
}my_emp;//定义类型之后,定义一个全局变量

三、结构体定义变量

定义一个结构体

struct Student
{
    /* data */
    int stu_no;//编号
    int stu_score;//分数
    char gender; // 性别 ‘F’女士 ‘M’男士
};

(一)、定义单个变量

在栈上创建变量

    //在栈上创建学生对象
    struct Student stu_stack={1001,89,'F'};

在堆上创建变量

通过结构体指针访问结构体数据,必须使用 -> ;寻址

    // 通过结构体指针访问结构体数据,必须使用  ->  ;寻址
    struct Student *stu_heap =  malloc(sizeof(struct Student));
    stu_heap->stu_no = 1002;
    stu_heap->stu_score = 99;
    stu_heap->gender = 'F';
    // 释放堆内存
    if(stu_heap!=NULL){
        free(stu_heap);
         stu_heap = NULL;
    }

(二)、定义数组变量

在栈上创建变量

    // 栈上创建结构体数组
    #if 0
    struct Student st[3];
    st[0].stu_no = 101;
    st[1].stu_no = 102;
    st[2].stu_no = 103;
    #endif

    struct Student student[3];
    int i;
    for ( i = 0; i < 3; i++)
    {
        /* code */
        student[i].stu_no = i;
        student[i].stu_score = 90+i;
        student[i].gender = 'F';
    }
    // 遍历打印
    for ( i = 0; i < 3; i++)
    {
        printf("%d\n%d\n%d\n",student[i].stu_no,student[i].stu_score,student[i].gender);
        /* code */
    }

在堆上创建变量

struct Student *students =  malloc(sizeof(struct Student)*3);
    int i;
    for(i=0;i<3;i++){
        students[i].stu_no = 100+i;
        students[i].stu_score = 520+i;
        students[i].gender = 'M';
    }
     // 遍历打印
    for ( i = 0; i < 3; i++)
    {
        printf("%d\n%d\n%d\n",students[i].stu_no,students[i].stu_score,students[i].gender);
        /* code */
    }
    if(students!=NULL){
        free(students);
        students==NULL;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值