首页 > 编程笔记 > C语言笔记 阅读:35

C语言结构体的定义和使用(附带实例)

在 C语言程序中,数组是具有相同类型数据的集合,但在实际生活中经常需要把不同类型的数据集合在一起。

例如要制作学生信息登记表,学号是整型,姓名是字符串,年龄是整型,成绩是浮点型,这些数据都与学生有一定的关联,但因为数据类型不同,不能用数组来存放,所以可以用结构体类型来解决这个问题。

C语言结构体的创建

一个结构体类型的一般形式为:
struct 结构体名{
    成员列表
};

例如:
struct stu{
    int num; //学号
    char *name; //姓名
    int age; //年龄
    float score; //成绩
};
stu 为结构体名,它包含 4 个成员,分别为 num、name、age 和 score。

C语言结构体变量的定义

结构体类型与 C语言中的 int、char、float 一样,只是基本数据类型。为了能够在程序中使用结构体类型的数据,应当定义结构体变量。

定义结构体变量的 3 种方法分别如下。

1) 先声明结构体类型,再定义结构体变量

struct stu{
    int num; //学号
    char *name; //姓名
    int age; //年龄
    float score; //成绩
};
struct stu student_1,student_2; //定义结构体变量student_1和student_2

2) 声明结构体类型的同时定义结构体变量

这种方法定义的一般形式为:
struct 结构体名{
    成员列表
}变量名列表;

例如:
struct stu{
    int num; //学号
    char *name; //姓名
    int age; //年龄
    float score; //成绩
}student_1,student_2; //定义结构体变量student_1和student_2

3) 不指定结构体名,直接定义结构体变量

这种方法定义的一般形式为:
struct{
    成员列表
}变量名列表;
这种方法没有声明结构体名,所以后面程序无法再定义该结构体的新的变量。

例如:
struct{
    int num; //学号
    char *name; //姓名
    int age; //年龄
    float score; //成绩
}student_1,student_2; //定义结构体变量student_1和student_2

C语言结构体变量的使用

在定义结构体变量时,可以对它进行初始化。初始化列表是用花括号括起来的一些常量,这些常量将会依次赋给结构体中的成员。

【实例】初始化结构体变量并输出结果。代码如下:
#include<stdio.h>

struct stu{
    int num; //学号
    char *name; //姓名
    int age; //年龄
    float score; //成绩
} student = {54,"张三",18,93.2};

int main()
{
    printf("num:%d\nname:%s\nage:%d\nscore:%f\n",
           student.num,student.name,student.age,student.score);
   
    return 0;
}
编译运行,结果如下:
num:54
name:张三
age:18
score:93.199997
输入结果中可看出,score 是浮点数类型,显示的是近似值,无法精确表示原值,但可用 %4.1f 显示原值,其中 4 是指输出总共 4 位(即 4 个字符),包括数字、小数点和空格,各占一个字符;而 1 是指小数点后保留一位。

可以单独对结构体中的某一成员进行初始化,其他未被指定初始化的成员,将会被系统初始化。数值型成员被初始化为 0,字符型成员被初始化为 '\0',指针型成员被初始化为 NULL(即指向空)。

【实例】初始化结构体部分成员。代码如下:
#include<stdio.h>

struct stu{
    int num; //学号
    char *name; //姓名
    int age; //年龄
    float score; //成绩
} student = {.age = 1}; //只对age初始化

int main()
{
    printf("num:%d\nname:%s\nage:%d\nscore:%f\n",
           student.num,student.name,student.age,student.score);
   
    return 0;
}
编译运行,结果如下:

num:0
name:(null)
age:1
score:0.000000

其中的“.”为结构体成员访问运算符,在上面两个实例中输出结果的时候,进行了结构体的成员访问,成员访问的形式为:
结构体变量名.成员名
通过这种方式,可以给结构体成员赋值,也可以获取结构体成员的值。

【实例】给结构体成员赋值和获取结构体成员的值。代码如下:
#include <stdio.h>

int main()
{
    struct{
        int num; //学号
        char *name; //姓名
        int age; //年龄
        float score; //成绩
    } student;
   
    //给结构体成员赋值
    student.num = 52;
    student.name = "李四";
    student.age = 18;
    student.score = 98.5;
    //输出结构体成员的值
    printf("学号:%d\n姓名:%s\n年龄:%d\n成绩:%4.1f\n",
           student.num,student.name,student.age,student.score);
   
    return 0;
}
编译后,运行结果如下:

学号: 52
姓名: 李四
年龄: 18
成绩: 98.5

相关文章