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;
56 0
|
4月前
|
Rust 算法 编译器
|
5月前
|
存储 缓存 C语言
C语言易错小贴士
C语言易错小贴士
|
存储 编译器 C语言
【进阶C语言】字符串与内存库函数认识与模拟实现(2)
size_t为无符号整形,接受他的返回值的变量类型也应该为size_t 函数参数就是字符指针类型。const为了修饰*str,防止原字符串的数据被修改。 需要包含的头文件为:#include&lt;string.h&gt;
76 0
|
6月前
|
存储 NoSQL 编译器
C语言的本质(二):汇编与C
C语言的本质(二):汇编与C
82 0
|
Java 编译器 Linux
第一个C语言程序(认识C语言的第一步)
第一个C语言程序(认识C语言的第一步)
46 0
|
编译器 C语言
C语言杂碎知识 最后两个肯定你不知道
C语言杂碎知识 最后两个肯定你不知道
|
Java 编译器 Linux
【C】C语言的介绍以及第一个C语言程序
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU )以及超级电脑等作业平台。
|
存储 编译器 C语言
C语言学习分享(第二次)------了解C语言-上
这篇文章主要给大家分享基础的C语言知识,让我们对C语言有一个大概的了解,这篇文章会从循环和函数一直讲到指针和结构体,但是都是对于每个知识点的简单认识,不会详细的说明,就是告诉大家C语言有这个东西,在我们后面的学习(文章)中会给大家一一详解,这篇文章很长,知识点多,大家可以看目录按需阅读.现在正式开始我们C语言的学习.(分为两次讲解)
|
存储 C语言
跑哥教你掌握C语言指针最根本的问题
指针 指针变量用来记录地址数据。 指针变量的用途就是用来找另外一个变量的,只有记录了有效地址的指针才能使用。
跑哥教你掌握C语言指针最根本的问题