C语言基础知识之(十):结构体

一、结构体声明

1、结构体声明位置:在main函数上面

声明语法:

struct 结构体类型名称{

数据类型  成员变量名;

数据类型  成员变量名;

数据类型  成员变量名[ ];

……
};

例:声明描述学生的结构体:学号、姓名、性别、分数

struct student {

    int number;

    char name[20];

    char sex;

    float score;

};

注:

每一个结构体当中声明的变量,称为成员变量;

在结构体内声明的成员变量的顺序可以任意;

成员变量的类型可以任意,根据自己的需求,可以是数组,也可以是结构体类型。

二、结构体定义和赋值

1、结构体定义在main函数下面

语法:

struct 结构体类型名称 结构体变量名称 = {对结构体成员变量按声明的顺序依次赋值,用逗号隔开};

例:对声明的struct student 类型声明变量:

设置初始值的顺序必须与声明变量的顺序保持一致

struct student stu1= {1, "zhangsan", 'f', 99.5};

struct student stu2= {2, "lisi", 'm', 99.4};

如果没有初值,则全部初始为0,和数组中的方法一样:

struct student stu3= {0};

如果是某个初始值不赋值的话则在对应的位置赋值0.

2、相同类型的结构体变量之间(不同名称)可以相互直接赋值

struct student stu4= stu1;

3、结构体变量定义后,不能再使用{}整体赋值,应采用如下的方式,逐个赋值。

给stu3的成员变量赋值(用到结构体访问的知识)

stu3.number = 3;

strcpy(stu3.name,"wangwu");// 字符串赋值使用字符串拷贝函数strcpy( );

stu3.sex = 'm';

stu3.score = 95.5;

4、重要概念理解

结构体类型:

声明结构体类型时,跟在struct后面的名称,称为结构体类型,而不是变量名。在使用是和struct一起连用,组成新的类型:结构体类型。如:struct student是一个结构体类型,使用这个类型就默认包含成员number,name[20],sex,score。结构体类型和基本数据类型的用法和功能一致。

结构体变量:

用结构体类型定义的变量称为结构体变量。它包含的成员类型和数量和结构体声明的成员是一致的。如:stu1、stu2等称为结构体变量,都包含的成员有number,name[20],sex,score。

成员变量:

声明结构体的时候就声明了这个结构体类型包含的成员变量。如:struct student结构体类型包含的成员变量是:number,name[20],sex,score。

三、结构体的访问

访问结构体的成员变量

语法:结构体变量名.成员变量名

成员变量和基本数据类型的变量一样使用,可以参与运算

例:打印第一个学生的所有信息

printf("%d\n",stu1.number);

printf("%s\n",stu1.name);

printf("%c\n",stu1.sex);

printf("%.2f\n",stu1.score);

 

从控制台输入数据,存储在成员变量中

printf("Pleaseenter number:\n");

scanf("%d",&stu2.number);

注:优先级 . 高于 &

四、包含结构体成员的结构体

声明结构体时,结构体的成员类型可以是之前已经声明过的结构体类型。

如:定义一个person的结构体,包括姓名,性别,出生年月。

1、先声明一个出生年月的结构体

struct date{

    int year;

    int month;

    int day;

};

typedef struct dateMyDate;

2、在声明人的结构体中包含已经声明的date结构体:姓名 性别 出生日期

struct person{

    char name[20];

    char sex;

    MyDate birthday;

};

typedef structperson Person;

3、对包含结构体成员变量的结构体赋值时,结构体成员的赋值要使用{ }。

    Person p1 = {"zhangsan", 'm',{2011, 11, 28}};

   

4、访问包含结构体成员变量的结构体

打印名字

    printf("%s\n", p1.name);

打印出生年份

    printf("%d\n", p1.birthday.year);

修改出生月份

    p1.birthday.month = 10;

printf("%d\n", p1.birthday.month);

语法:结构体类型变量名.结构体类型成员变量名.成员变量名

 

五、typedef的使用

语法:typedef 原类型名 新类型名

typedef的作用:给数据类型重命名,类似于起别名。

如: typedef int Integer;

Integer a = 10;等同于 int a = 10;

同样的为了简化代码,使用typedef给结构体重命名,可以大大增加代码的灵活性和使用的便利性。

如:typedef structstudent Student;

重新起的结构体的名字首字母大写,易于区分。这时Student和struct student是同一个结构体类型的两个名字,作用是等同的,都是包含同样成员变量的结构体类型。使用Student会比struct student更方便。

使用typedef的方法:

1、分开使用

如:声明描述点的结构体

struct cpoint {

    float x;

    float y;

};

typedef structcpoint CPoint;

2、在一句代码中合并使用

如:声明描述老师的结构体,一句代码完成typedef声明和创建

typedef structteacher{

    char name[20];

    char sex;

    int age;

}Teacher;



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值