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
ICP备案:
公安联网备案: