C语言 结构体和联合体的区别

C语言 结构体和联合体的区别

什么是结构体

在 C 语言中,结构体是一种自定义数据类型,它允许程序员将不同类型的变量组合在一起,形成一个数据集合。结构体是由一组多个变量组成的新的数据类型,在定义结构体时,需要定义这个结构体包含的成员变量的类型和名称。

通常定义结构体的方式为:

struct 结构体名称{
    成员变量1;
    成员变量2;
    ...........
    成员变量n;
};

其中,结构体名称是自定义的,可以是任意合法的标识符,成员变量是由数据类型和标识符组成的。

例如,定义一个存储学生信息的结构体:

struct Students{
    char name[20];
    int age;
    char gender;
    char address[50];
};

在这个结构体中,我们定义了四个成员变量,分别是学生姓名、学生年龄、学生性别、学生地址。

定义了结构体之后,我们可以通过结构体的名称来声明变量,也可以通过"."运算符来访问结构体的成员变量,例如:

struct Students stu;  // 声明了一个名为stu的学生信息结构体变量

strcpy(stu.name, "Tom");  // 向变量stu中的name成员变量中赋值为"Tom"
stu.age = 18;  // 向变量stu中的age成员变量中赋值为18
stu.gender = 'M';  // 向变量stu中的gender成员变量中赋值为'M'
strcpy(stu.address, "No.123, Xinyuan Street, Haidian District, Beijing");  // 向变量stu中的address成员变量中赋值为"No.123, Xinyuan Street, Haidian District, Beijing"

什么是联合体

在 C 语言中,联合体是一种特殊的结构体。不同的是,联合体中的成员变量共享同一内存区域,即联合体中的所有成员变量占用的是同一块内存空间。因此,联合体的各个成员只能是同一种数据类型,这些成员只有一个可以被激活。

通常定义联合体的方式为:

union 联合体名称{
    成员变量1;
    成员变量2;
    ...........
    成员变量n;
};

和结构体一样,联合体中的成员变量是由数据类型和标识符组成的。定义联合体之后,我们可以通过联合体的名称来声明变量,也可以通过"."运算符来访问联合体的成员变量。

例如,定义一个联合体:

union Data {
  int i;
  float f;
  char str[20];
};

在这个联合体中,我们定义了三个成员变量,分别是一个整型变量、一个浮点型变量和一个字符串变量。

我们可以通过联合体来存储一个整型、浮点型或字符串类型的数据,但是在同一时间内,联合体中只能有一个成员变量被激活,即只能存储其中的一种数据类型。例如:

union Data data;
data.i = 10;
printf( "data.i : %d\n", data.i);

data.f = 220.5;
printf( "data.f : %f\n", data.f);

strcpy( data.str, "C Programming");
printf( "data.str : %s\n", data.str);

在这个示例中,我们定义了一个联合体data,并依次往其中赋值一个整型、一个浮点型和一个字符串变量。但需要注意的是,每次变量被赋值之后,其他的成员变量会被自动更新为新值,因为每个成员变量都共享同一块内存空间。

区别

结构体和联合体之间的主要区别在于:

  1. 结构体的不同成员变量占用不同的内存空间,而联合体的不同成员变量共享同一块内存空间;
  2. 结构体中的多个成员变量可以同时被使用,而联合体中只能有一个成员变量被激活。

对于不同的应用场景,我们需要选择适合的数据类型来存储数据。如果需要存储多种不同类型的数据,可以使用结构体。如果需要只存储其中一种数据类型,并且在不同的时间段中需要存储不同类型的数据,可以使用联合体。

例子

示例1:一个学生信息的结构体程序

#include <stdio.h>
#include <string.h>

struct student{
    char name[20];
    int age;
    char gender;
    char address[50];
};

int main()
{
    struct student stu; // 定义结构体变量stu,用于存储学生信息
    printf("请输入学生姓名:");
    scanf("%s", stu.name);
    printf("请输入学生年龄:");
    scanf("%d", &stu.age);
    printf("请输入学生性别:");
    scanf(" %c", &stu.gender);
    printf("请输入学生地址:");
    scanf("%s", stu.address);

    printf("\n学生信息如下:\n");
    printf("姓名:%s\n", stu.name);
    printf("年龄:%d\n", stu.age);
    printf("性别:%c\n", stu.gender);
    printf("地址:%s\n", stu.address);

    return 0;
}

这个程序通过一个学生信息的结构体来存储学生的姓名、年龄、性别和地址信息,用户可以输入这些信息,程序将其存储起来并输出。

示例2:一个简单的计算器程序

#include <stdio.h>

union calc{
    int num;
    char op;
};

int main()
{
    char operator;
    int num1, num2, result;
    union calc value;
    printf("请输入运算符(+, -, *, / ):");
    scanf("%c", &operator);
    printf("请输入两个数字:");

    scanf("%d", &num1);
    scanf("%d", &num2);

    value.num = num1;
    switch(operator){
        case '+':
            value.num += num2;
            break;
        case '-':
            value.num -= num2;
            break;
        case '*':
            value.num *= num2;
            break;
        case '/':
            value.num /= num2;
            break;
        default:
            printf("错误的运算符\n");
            return 1;
    }

    printf("运算结果:%d\n", value.num);

    return 0;
}

这个程序通过一个简单的联合体来实现加、减、乘、除四种运算。用户输入指定的运算符和两个数字,程序通过算法计算出结果,并输出。在这个程序中,我们使用了联合体来存储两个数字和一个运算符,根据不同的运算符,选择联合体中的不同成员变量来完成运算。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 结构体和联合体的区别 - Python技术站

(0)
上一篇 2023年5月10日
下一篇 2023年5月10日

相关文章

  • C语言各类操作符全面讲解

    C语言各类操作符全面讲解 C语言中操作符是完成各种操作的重要基础,操作符可分为以下几类: 算术操作符 关系操作符 逻辑操作符 赋值操作符 条件操作符 位操作符 下面我们一一来进行详细讲解。 算术操作符 操作符 功能 + 两数相加 – 两数相减 * 两数相乘 / 两数相除 % 取余数 ++ 自增操作 — 自减操作 示例: int a = 10; int b …

    C 2023年5月23日
    00
  • 12个C语言必背实例分享

    12个C语言必背实例攻略 本文将分享12个C语言必背实例,涉及到的知识点从基础的数据类型、数组、结构体到文件操作等。以下是每个实例的说明及代码示例。 1. 输入输出 实例说明 通过 scanf 函数输入三个数,再通过 printf 函数输出这三个数的和 代码示例 #include <stdio.h> int main() { int a,b,c,…

    C 2023年5月23日
    00
  • sublime text3搭建配置c语言编译环境的详细图解教程(小白级)

    下面是“sublime text3搭建配置c语言编译环境的详细图解教程(小白级)”的完整攻略。 1. 安装Sublime Text3 首先需要在Sublime Text3官网上下载安装Sublime Text3,下载地址为:https://www.sublimetext.com/3 2. 安装Package Control插件 Sublime Text3安装…

    C 2023年5月23日
    00
  • 红与黑

    有一个矩形房间,覆盖正方形瓷砖。每块瓷砖涂成了红色或黑色。一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一,但他不能移动到红砖上,只能移动到黑砖上。编写一个程序,计算他通过重复上述移动所能经过的黑砖数(一开始站立的黑砖也要算)。 输入 开头行包含两个正整数W和H,W和H分别表示矩形房间的列数和行数,且都不超过20.每个数据集有H行,其中每行包含W…

    C 2023年4月24日
    00
  • C语言菜鸟基础教程之Hello World

    C语言菜鸟基础教程之Hello World 什么是C语言? C语言是一种通用的高级程序设计语言,它能够方便地对计算机进行底层操作,如硬件控制和内存访问等。同时由于其简洁、高效和强大的特性,C语言在操作系统、编译器、游戏开发等领域得到了广泛的应用。 Hello World实例 下面以经典的Hello World程序为例,让我们一步步地学习如何使用C语言进行编程…

    C 2023年5月23日
    00
  • C语言实现求梅森素数的代码与解析

    C语言实现求梅森素数的代码与解析 什么是梅森素数 梅森素数(Mersenne prime)是指形如2^p-1的素数,其中p是一个素数。 原理 求解梅森素数的方法是使用梅森-卡恩算法(Lucas-Lehmer test),这是一种用于测试一个数字是否是梅森素数的算法。该算法的基本思路是通过递推计算序列S,判断S的最后一个数是否为0,若为0则该数是梅森素数。具体…

    C 2023年5月22日
    00
  • C++内嵌汇编示例详解

    对于C++内嵌汇编示例的详解,可以从以下几个方面进行讲解: 1.概述:什么是内嵌汇编 内嵌汇编是指将汇编代码嵌入到C或C++程序中的技术,可以直接在C++源代码中嵌入汇编语言,通过内嵌汇编可以利用汇编语言的精细化控制实现高效的代码。 2.内嵌汇编说明 在C++中内嵌汇编可以使用asm关键字来实现,类似于以下形式: asm (assembly content)…

    C 2023年5月23日
    00
  • C语言示例代码讲解栈与队列

    下面是关于“C语言示例代码讲解栈与队列”的完整攻略: 一、栈和队列的概念 栈和队列都是常用的数据结构,他们都是线性结构,但是他们在元素的插入和删除的方法以及相应的顺序限制上是有区别的。栈是一种“后进先出”的数据结构,也就是最后放入的元素最先被取出;而队列是一种“先进先出”的数据结构,也就是最先放入的元素最先被取出。 二、栈和队列的实现 1. 栈的实现 栈可以…

    C 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部