C讲课笔记:结构体

举报
howard2005 发表于 2021/11/19 02:45:09 2021/11/19
【摘要】 文章目录 一、结构体(一)结构体概述(二)结构体定义(三)结构体变量的声明(四)结构体成员的引用 二、案例演示(一)定义与使用结构体1、编写程序 - 定义与使用结构体.c2、运行程序,查看结果...

一、结构体

(一)结构体概述

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

(二)结构体定义

struct 类型名 {
    类型1 成员名1;
    类型2 成员名2;
    ……
};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

以上整个部分是一个数据类型,与整型的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);         
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

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);         
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

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);    

  
 
  • 1
  • 2
  • 3
  • 4

文章来源: howard2005.blog.csdn.net,作者:howard2005,版权归原作者所有,如需转载,请联系作者。

原文链接:howard2005.blog.csdn.net/article/details/112599033

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。