[C语言]结构体详解,自定义类型:结构体.

一,前言

        C语⾔已经提供了内置类型,如:char、short、int、long、float、double等,但是只有这些内置类 型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。描述⼀个学⽣需要 名字、年龄、学号、⾝⾼、体重等;描述⼀本书需要作者、出版社、定价等。C语⾔为了解决这个问 题,增加了结构体这种⾃定义的数据类型,让程序员可以自己创造适合的类型。

二,结构体详解

什么是结构体:

        官方来说结构体就是一些值的集合,这些值称为成员变量.结构体的每个成员可以是不同类型的变量.说到集合,数组也是集合,但是不同的是数组只能是相同类型元素的集合.

        我们为什么要用到结构体呢? 在我们实际的应用中,比如对学生的信息进行管理时,学生的信息有:姓名(char),性别(char),学号(int),成绩(float)等多种数据.如果把这写数据分别单独定义的,就会特别松散,复杂,难以管理.因此这时我们需要把一些相关的变量组合起来,以一个整体形式对对象进行描述.这就结构体的魅力.

结构体类型的声明:

我们以一个学生的信息来描述结构体类型的声明,假如我们要记录学生的姓名(char),性别(char),年龄(int),学号(char),成绩(flaot).等信息时可以这样声明结构体:

struct stu
{
    char name [20]; //姓名
    char sex[5];    //性别
    int  year;      //年龄
    char ID[20];    //学号
    float grade[20]; //成绩 
};

在这里我们只是对结构体进行了声明,也就是 struct stu 就是结构体的变量类型.然后接下来就是创建结构体变量.

定义结构体变量: 

方法一:先声明结构体,在创定义构体变量.

//声明结构体
struct student
{
    char name [20]; //姓名
    char sex[5];    //性别
    int  year;      //年龄
    char ID[20];    //学号
    float grade[20]; //成绩 
};

定义结构体变量

struct student stu1,tu2; 

方法二:在声明结构体的同时定义结构体变量

//声明结构体类型
struct stu
{
    char name [20]; //姓名
    char sex[5];    //性别
    int  year;      //年龄
    char ID[20];    //学号
    float grade;    //成绩 
}stu1,stu2;           //声明结构体变量

方法三;直接定义结构体变量 

struct 
{
    char name [20]; //姓名
    char sex[5];    //性别
    int  year;      //年龄
    char ID[20];    //学号
    float grade; //成绩 
}stu1,stu2;      

在这里我们要注意的是:

只有结构体变量才能分配地址,而结构体的定义是不分配空间的

结构体变量的声明需要在主函数之上或者在主函数中声明,如果在主函数之下则会报错.

初始化结构体:

先声明结构体,再定义结构体变量和初始化

//声明结构体
struct student
{
    char name [20]; //姓名
    char sex[5];    //性别
    int  year;      //年龄
    char ID[20];    //学号
    float grade; //成绩 
};

定义结构体变量并初始化
struct student stu1 = {"小明","男",18,"234192371",99.88};
struct student stu2 = {"小美","女",19,"234192372",99.99};

在声明结构体的同时定义结构体变量,再初始化结构体

//声明结构体并定义结构体变量
struct student
{
    char name [20]; //姓名
    char sex[5];    //性别
    int  year;      //年龄
    char ID[20];    //学号
    float grade; //成绩 
}stu1,stu2;

初始化结构体变量
stu1 = {"小明","男",18,"234192371",99.88};
stu2 = {"小美","女",19,"234192372",99.99};

按指定的顺序初始化结构体变量:

//声明结构体
struct student
{
    char name [20]; //姓名
    char sex[5];    //性别
    int  year;      //年龄
    char ID[20];    //学号
    float grade; //成绩 
};

定义结构体变量并初始化
struct student stu1 = {"小明","男",18,"234192371",99.88};
struct student stu2 = {.name="小美",.ID="23216234",.year=18,.sex="女",.grade=99.99};

结构体成员的访问:

结构体成员的直接访问

#include <stdio.h>

struct student
{
    char name [20]; //姓名
    char sex[5];    //性别
    int  year;      //年龄
    char ID[20];    //学号
    float grade; //成绩 
};

int main()
{
    定义结构体变量并初始化
    struct student stu1 = {"小明","男",18,"234192371",99.88};
    struct student stu2 = {.name="小美",.ID="23216234",.year=18,.sex="女",.grade=99.99};

    //直接访问结构体成员
    printf("name = %s,sex = %c,grade =%f",stu1.name,stu1.sex.stu1.grade);



}

结构体成员的间接访问:

有时候我们得到的不是⼀个结构体变量,而是得到了⼀个指向结构体的指针。

#include <stdio.h>

struct student 
{
    char name[20];
    char sex[5];
    int year ;
};

int main()
{
     struct student stu = {"小美","女", 18};
     struct student *ptr = &stu ;
     ptr->name = "小明";
     ptr->sex = "男";
     ptr->year = 10;
     printf("name = %s sex = %c  year = %d\n", ptr->name, ptr->sex,ptr->year);
     return 0


}

typedef 关键字与结构体

typedef 用来定义新的数据类型,通常typedef 与结构体的定义配合使用.使用typedef 的目的使结构体的表达更加简练


struct student //结构体变量类型
{
    char name[20];
    char sex[5];
    int  year ;
}stu;  //这里的stu为结构体变量


typedef struct stdent
{
    char name[20];
    char sex[5];
    int  year ;
}stu;    //结构体变量类型
//stu 相当于 struct student

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值