C语言进1

简介: C语言进1

C语言进阶:结构体与联合体

在C语言编程中,结构体(struct)和联合体(union)是两种用于存储多个不同类型数据的数据结构。它们各自具有独特的特点和用途,使得程序员能够更灵活、更有效地处理复杂数据类型。本文将详细介绍结构体和联合体的概念、使用方式及在编程中的应用。

一、结构体

结构体是一种用户自定义的数据类型,它允许我们将多个不同类型的数据组合成一个单独的数据单元。结构体中的每个数据成员可以有不同的类型,并且可以有自己的名称。

下面是一个简单的结构体示例:

c复制代码

 

#include <stdio.h> 

 

 

 

// 定义一个名为Student的结构体

 

struct Student {

 

char name[50];

 

int age;

 

float score;

 

};

 

 

 

int main() {

 

// 创建一个Student类型的变量student1

 

struct Student student1;

 

 

 

// 为student1的成员赋值

 

strcpy(student1.name, "张三");

 

student1.age = 20;

 

student1.score = 85.5;

 

 

 

// 打印student1的成员

 

printf("姓名:%s,年龄:%d,成绩:%.1f\n", student1.name, student1.age, student1.score);

 

 

 

return 0;

 

}

在上面的代码中,我们首先定义了一个名为Student的结构体,它包含三个成员:name(字符数组)、age(整型)和score(浮点型)。然后,我们创建了一个Student类型的变量student1,并为它的成员赋值。最后,我们打印出student1的成员值。

二、联合体

联合体与结构体类似,也是一种用户自定义的数据类型。不同的是,联合体中的所有成员都占用同一块内存空间,即联合体的大小等于其最大成员的大小。这意味着,在同一时间,联合体只能存储其一个成员的值。

下面是一个联合体的示例:

c复制代码

 

#include <stdio.h> 

 

 

 

// 定义一个名为Data的联合体

 

union Data {

 

int intVal;

 

float floatVal;

 

char charVal;

 

};

 

 

 

int main() {

 

// 创建一个Data类型的变量data

 

union Data data;

 

 

 

// 为data的不同成员赋值(注意:这会覆盖之前的值)

 

data.intVal = 10;

 

data.floatVal = 20.5;

 

data.charVal = 'A';

 

 

 

// 打印data的当前值(取决于最后赋值的成员)

 

printf("最后一个赋值的成员类型是:");

 

if (data.charVal) {

 

printf("char,值为:%c\n", data.charVal);

 

} else if (data.floatVal) {

 

printf("float,值为:%.1f\n", data.floatVal);

 

} else {

 

printf("int,值为:%d\n", data.intVal);

 

}

 

 

 

return 0;

 

}

在这个例子中,我们定义了一个名为Data的联合体,它包含三个成员:intValfloatValcharVal。然后,我们创建了一个Data类型的变量data,并尝试为它的不同成员赋值。由于联合体成员共享同一块内存空间,因此每次赋值都会覆盖之前的值。最后,我们打印出data的当前值,这取决于最后赋值的成员。

三、总结

结构体和联合体是C语言中两种强大的数据结构,它们允许我们以更灵活、更有效的方式组织和管理数据。结构体适用于将多个相关数据组合成一个整体,而联合体则适用于在同一内存空间中存储不同类型的数据。在实际编程中,我们应该根据具体需求选择合适的数据结构来优化代码和提高效率。

 

相关文章
|
C语言
【进阶C语言】字符串与内存库函数认识与模拟实现(1)
size_t为无符号整形,接受他的返回值的变量类型也应该为size_t 函数参数就是字符指针类型。const为了修饰*str,防止原字符串的数据被修改。 需要包含的头文件为:#include&lt;string.h&gt;
62 0
|
5月前
|
Rust 算法 编译器
|
存储 编译器 C语言
【进阶C语言】字符串与内存库函数认识与模拟实现(2)
size_t为无符号整形,接受他的返回值的变量类型也应该为size_t 函数参数就是字符指针类型。const为了修饰*str,防止原字符串的数据被修改。 需要包含的头文件为:#include&lt;string.h&gt;
83 0
|
Java 编译器 Linux
第一个C语言程序(认识C语言的第一步)
第一个C语言程序(认识C语言的第一步)
50 0
|
编译器 C语言
C语言杂碎知识 最后两个肯定你不知道
C语言杂碎知识 最后两个肯定你不知道
|
编译器 程序员 Linux
C语言——可执行程序过程
C语言——可执行程序过程
|
Java 编译器 Linux
【C】C语言的介绍以及第一个C语言程序
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU )以及超级电脑等作业平台。
|
存储 程序员 C语言
【C语言】文件的相关操作(一文10分钟彻底弄懂)
🐳文件简介 当程序结束时,内存中的数据就会丢失,这样每次运行程序时都要重新输入数据。那么有没有可以长久保存数据的方法呢?当然是有的啦!这个方法就是使用文件操作,用文件保存键盘输入和屏幕输出的数据,将数据以文件的形式存放在光盘、磁盘等外存储器上,可达到重复使用、永久保存数据的目的。
106 0
|
存储 C语言
跑哥教你掌握C语言指针最根本的问题
指针 指针变量用来记录地址数据。 指针变量的用途就是用来找另外一个变量的,只有记录了有效地址的指针才能使用。
跑哥教你掌握C语言指针最根本的问题
|
Java 编译器 C语言
初识c语言系列-1-第一个c语言程序
初识c语言系列-1-第一个c语言程序
初识c语言系列-1-第一个c语言程序