C讲课笔记:结构体

本文聚焦于C语言结构体,介绍了结构体的概念,它是不同数据类型变量的集合体。还讲解了结构体的定义、变量声明及成员引用方式,通过编写程序和运行结果进行案例演示,最后布置了利用结构体数组完成任务的课堂练习。

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

零、本节学习目标

  1. 理解C语言结构体
  2. 掌握如何定义结构体
  3. 掌握如何使用结构体

一、结构体

(一)结构体概述

  • “结构体类型”是由不同数据类型变量组成的集合体,相当于其它高级语言中的记录。结构体类型的数据由若干称为“成员”的数据组成,每个成员既可以是一个基本数据类型的数据,也可以是另一个构造类型的数据。

(二)结构体定义

struct 类型名 {
    类型1 成员名1;
    类型2 成员名2;
    ……
};
  • 以上整个部分是一个数据类型,与整型的int是同样地位。可用typedef把结构体类型替换成一个只有几个字母的简短标识符。

(三)结构体变量的声明

  • 结构体变量是用说明的结构体类型所定义的一个变量,与结构体类型不是一回事。一个结构体变量所占字节数为其所有成员所占字节数之和。如struct Student {char name[10]; int age;} a, b; 则表明定义了两个结构体变量a,b,每个变量占14个字节。a,b与int i, j; 中的变量i,j是同样地位。

(四)结构体成员的引用

  • 引用成员可用以下3种方式:(1)结构体变量名.成员名;(2)指针变量名->成员名:(3)(*指针变量名).成员名。点(.)称为成员运算符,箭头(->)称为结构指向运算符。

二、案例演示

(一)定义与使用结构体

1、编写程序 - 定义与使用结构体.c

/* 
 功能:定义和使用结构体
 作者:华卫
 日期:2013年12月3日
 */
#include <stdio.h>
#include <string.h>
 
//定义结构体
struct Student
{
    int num;
    char name[20];
    char sex[4];
    int age;
    double score;
    char address[30]; 
};
 
void main() {
    struct Student stu1, stu2, stu3; // 声明结构体变量
    
    //给第一个学生赋值
    stu1.num = 1;
    strcpy(stu1.name, "李平");
    strcpy(stu1.sex, "男");
    stu1.age = 18;
    stu1.score = 98.5;
    strcpy(stu1.address, "泸州江阳区瓦窑坝35#");   
    
    //给第二个学生赋值
    stu2.num = 2;
    strcpy(stu2.name, "王红");
    strcpy(stu2.sex, "女");
    stu2.age = 19;
    stu2.score = 99.5;
    strcpy(stu2.address, "泸州龙马潭区潇湘路15#");     
    
    //给第三个学生赋值
    stu3.num = 3;
    strcpy(stu3.name, "张枫");
    strcpy(stu3.sex, "男");
    stu3.age = 21;
    stu3.score = 69.0;
    strcpy(stu3.address, "泸州龙马潭区潇湘路15#");
    
    //输出三个学生的信息
    printf("学号\t姓名\t性别\t年龄\t成绩\t家庭住址\n");    
    printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", stu1.num, stu1.name, stu1.sex, stu1.age, stu1.score, stu1.address);    
    printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", stu2.num, stu2.name, stu2.sex, stu2.age, stu2.score, stu2.address);        
    printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", stu3.num, stu3.name, stu3.sex, stu3.age, stu3.score, stu3.address);         
}

2、运行程序,查看结果

在这里插入图片描述

3、课堂练习:利用结构体数组来完成上述任务。

(二)使用指针指向结构体

1、编写程序 - 使用指针指向结构体.c

/* 
 功能:使用指针指向结构体 
 作者:华卫
 日期:2013年12月3日
 */
#include <stdio.h>
#include <string.h>
 
//定义结构体
struct Student
{
    int num;
    char name[20];
    char sex[4];
    int age;
    double score;
    char address[30]; 
};
 
void main() {
    struct Student stu1, stu2, stu3; // 声明结构体变量
    struct Student *s1, *s2, *s3;  // 声明结构体指针 
    
    s1 = &stu1;
    s2 = &stu2;
    s3 = &stu3;
    
    //给第一个学生赋值
    s1->num = 1;
    strcpy(s1->name, "李平");
    strcpy(s1->sex, "男");
    s1->age = 18;
    s1->score = 98.5;
    strcpy(s1->address, "泸州江阳区瓦窑坝35#");   
    
    //给第二个学生赋值
    s2->num = 2;
    strcpy(s2->name, "王红");
    strcpy(s2->sex, "女");
    s2->age = 19;
    s2->score = 99.5;
    strcpy(s2->address, "泸州龙马潭区潇湘路15#");     
    
    //给第三个学生赋值
    s3->num = 3;
    strcpy(s3->name, "张枫");
    strcpy(s3->sex, "男");
    s3->age = 21;
    s3->score = 69.0;
    strcpy(s3->address, "泸州龙马潭区潇湘路15#");   
    
    
    //输出三个学生的信息
    printf("学号\t姓名\t性别\t年龄\t成绩\t家庭住址\n");    
    printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", s1->num, s1->name, s1->sex, s1->age, s1->score, s1->address);    
    printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", s2->num, s2->name, s2->sex, s2->age, s2->score, s2->address);        
    printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", s3->num, s3->name, s3->sex, s3->age, s3->score, s3->address);         
}

2、运行程序,查看结果

在这里插入图片描述

  • 输出三个学生信息,代码还可以这样写:
printf("学号\t姓名\t性别\t年龄\t成绩\t家庭住址\n");    
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", (*s1).num, (*s1).name, (*s1).sex, (*s1).age, (*s1).score, (*s1).address);    
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", (*s2).num, (*s2).name, (*s2).sex, (*s2).age, (*s2).score, (*s2).address);        
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", (*s3).num, (*s3).name, (*s3).sex, (*s3).age, (*s3).score, (*s3).address);    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒城译痴无心剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值