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

 

相关文章
|
2月前
|
Rust 算法 编译器
|
3月前
|
C语言
【C语言刷题系列】交换两个变量的三种方式
【C语言刷题系列】交换两个变量的三种方式
|
4月前
|
存储 NoSQL 编译器
C语言的本质(二):汇编与C
C语言的本质(二):汇编与C
65 0
|
11月前
|
编译器 C语言
C语言杂碎知识 最后两个肯定你不知道
C语言杂碎知识 最后两个肯定你不知道
|
存储 编译器 C语言
C语言学习分享(第二次)------了解C语言-上
这篇文章主要给大家分享基础的C语言知识,让我们对C语言有一个大概的了解,这篇文章会从循环和函数一直讲到指针和结构体,但是都是对于每个知识点的简单认识,不会详细的说明,就是告诉大家C语言有这个东西,在我们后面的学习(文章)中会给大家一一详解,这篇文章很长,知识点多,大家可以看目录按需阅读.现在正式开始我们C语言的学习.(分为两次讲解)
|
C语言
c语言分层理解(c语言指针笔试题解析)(2)
前言 经过了一天的写作,终于完成了这一篇,对指针进行了练习,感觉很爽,分享一下!还望大佬多多关注! 1. 一维数组和指针
60 0
|
C语言
c语言分层理解(c语言指针笔试题解析)(1)
前言 经过了一天的写作,终于完成了这一篇,对指针进行了练习,感觉很爽,分享一下!还望大佬多多关注! 1. 一维数组和指针
54 0
|
存储 Java Linux
【C语言】关于我回头学的那些输入输出等(四)
我的第一门语言就是C,但是学艺不精,中途跑去学了C#和Java后,感觉到了C的重要性,毕竟是最接近底层的语言,又跑回来学C。 毕竟前两门的控制语句,变量什么的都是类似的,回到C后只需要学习一些特定C的语法,比如宏,预编译指令等等,这些对我来说都是陌生的词汇。 所以边学边记录一下以前的知识。
89 0
|
存储 C语言
深究C语言-1.数组篇
无论是一维数组还是二维数组,都是一组相同数据类型的有序集合,它能将一系列相同类型的数据看作一个整体,使用一个名字命名,再用下标进行分量标识,在内存中连续存放,用数组名和下标可以唯一地确定数组元素。
180 0
深究C语言-1.数组篇
|
存储 C语言
深究C语言2.指针篇
还是那句话,我给的例子对你们理解这些东西是很有帮助的,不要问我为什么不给题目,学习编程,我觉得更好的还是学思维,就算上面的例子你不知道它讲的什么都不要紧,但是要理解思维。我不想给题目你们的原因还有一个就是,如果你把这些例子搞通了之后,自己也会知道这些是什么题目的例子。
125 0
深究C语言2.指针篇