【C语言】结构体初阶精讲

        这篇文章记录结构体的一系列内容,从定义到使用,代码依旧来自VS环境下。

目录

一、 定义和使用结构体变量

1.定义结构体类型变量

2.结构体变量的初始化及引用

二、使用结构体数组

三、结构体指针

 1.指向结构变量的指针


 

一、 定义和使用结构体变量

        C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。在其他一些高级语言中称为“记录”(record)。

声明一个结构体类型的一般形式为:

struct 结构体名

{成员表列}

花括号内是对成员进行说明:

类型名 成员名

        “成员表列”(member list)也称为“域表”(field list),每一个成员是结构体中的一个域。成员名命名规则与变量名相同。
注意:
(1)结构体类型并非只有一种,而是可以设计出许多种结构体类型,例如:除了可以建立下面的 struct Student 结构体类型外,还可以根据需要建立名为 struct Teacher,structWorker和struct Date等结构体类型,各自包含不同的成员。
(2)成员可以属于另一个结构体类型。例如:
 

struct Date          //声明一个结构体类型 struct Date
{ 
    int month;           //月
    int day;             //日
    int year;            //年
};
struct Student       //声明一个结构体类型 struct Student
{
    int num;
    char name[20];
    char sex;
    int age;
    struct Date birthday; //成员 birthday 属于 struct Date类型
    char addr[30];
};

1.定义结构体类型变量

  1.  先声明结构体类型,再定义该类型的变量

  2. 在声明类型的同时定义变量

  3. 不指定类型名而直接定义结构体类型变量

2.结构体变量的初始化及引用

【例1】 把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息。
 

#include <stdio.h>
int main()
{
    struct Student           //声明结构体类型 struct Student
    {
        long int num;        //以下4行为结构体的成员
        char name[20];
        char sex;
        char addr[20];
    }
a={10101,"Li Lin",'M',"123 Beijing Road"}; //定义结构体变量a并初始化
printf("NO.:%1d\nname:%s\nsex:%c\naddress:%s\na.numa.name.a.sex.a.addr);
return 0; 
}

注意:不能企图通过输出结构体变量名来达到输出结构体变量所有成员的值。
下面用法不正确:
printf("%s\n".student1);           //企图用结构体变量名输出所有成员的值
只能对结构体变量中的各个成员分别进行输人和输出。 

二、使用结构体数组

【例2】 有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输人被选人的名字,最后输出各人得票结果。
 

#include<string. h>
#include<stdio. h>
struct Person           //声明结构体类型 struct Person
{
    char name[20];          //候选人姓名
    int count;              //候选人得票数
}
leader[3]= {"Li",o,"Zhang",o,"Sun",o};        //定义结构体数组并初始化
int main()
{
    int i,j;
    char leader_name[20];     //定义字符数组
    for(i=1;i<=10;i++)
    {
        scanf("%s",leader_name);     //输人所选的候选人姓名
        for(j=0;j<3;j++)
        if(stremp(leader_name,leader[j].name)==0)leader[j].count++;
    }
    printf("\nResult:\n");
    for(i=0;i<3:i++)
    printf("%5s:%d\n",leader[i].name,leader[i].count);
    return 0;
} 

三、结构体指针

 1.指向结构变量的指针

【例3】通过指向结构体变量的指针变量输出结构体变量中成员的信息。

 

#include<stdio. h>
#include <string. h>
int main()
{
    struct Student
    {
        long num;
        char name[20];
        char sex;
        float score;
    };
    struct Student stu_1;
    struct Student*p;
    p=&stu_l;
    stu1.num=10101;
    strcpy(stu_l.name,"Li Lin");
    stu_1.sex='M';
    stu_1.score=89.5;
    printf("No.:%ld\nname:%s\nsex:%c\nscore:%5.1f\n”,stu 1.num,stu1.name,stu_l.sex,stu_l.score);
    printf("\nNo.:%ld\nname:%s\nsex:%c\nscore:%5.1f\n”,(*p).num,( * p).name,( * p).sex, ( * p).score);
    return 0;
}

这是结构体初阶讲解,后期会发布进阶内容,敬请期待! 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mr_star_galaxy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值