C语言结构体的定义和使用(附带实例)
在 C语言程序中,数组是具有相同类型数据的集合,但在实际生活中经常需要把不同类型的数据集合在一起。
例如要制作学生信息登记表,学号是整型,姓名是字符串,年龄是整型,成绩是浮点型,这些数据都与学生有一定的关联,但因为数据类型不同,不能用数组来存放,所以可以用结构体类型来解决这个问题。
例如:
定义结构体变量的 3 种方法分别如下。
例如:
例如:
【实例】初始化结构体变量并输出结果。代码如下:
可以单独对结构体中的某一成员进行初始化,其他未被指定初始化的成员,将会被系统初始化。数值型成员被初始化为 0,字符型成员被初始化为 '\0',指针型成员被初始化为 NULL(即指向空)。
【实例】初始化结构体部分成员。代码如下:
【实例】给结构体成员赋值和获取结构体成员的值。代码如下:
例如要制作学生信息登记表,学号是整型,姓名是字符串,年龄是整型,成绩是浮点型,这些数据都与学生有一定的关联,但因为数据类型不同,不能用数组来存放,所以可以用结构体类型来解决这个问题。
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