C语言结构体 共用体0815

本文介绍了C语言中的结构体和共用体。结构体是一种构造数据类型,赋值时赋的是地址。共用体与结构体类似,但所有成员共享同一内存单元,且只能在某一时刻让一个成员起作用。通过示例代码展示了结构体和共用体的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码是最为耐心、最能忍耐和最令人愉快的伙伴,在任何艰难困苦的时刻,它都不会抛弃你。
结构体:结构体是一种构造数据类型
结构体里面不能直接对数据直接赋值,赋值的是地址。
struct [结构体] //struct是关键字
{
类型标识符 成员名;
……….
char names[100]; //姓名
char sex[10]; //性别
chhar mz[10]; //名族
char bd[100] ://出生年月日
}
void main (){
struct macard card1;
strcpy(card1.name ,”三支熊”); //赋值的方式1
sprinntf(card1.name ,”三支熊”); //赋值的方式2
struct MyStruct card1 = {“姓名:赵子龙”,9,”职业:战士”}; //赋值的方式3

}
下面总结下结构体,就是相当于一个类,如果要用的话直接用就好,然后在打印的时候直接用就好,下面用一个简单代码实现一下,结构体的用法。
我的这个代码还是比较繁琐。
主要学会结构体的用法就好。


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
struct MyStruct
{
    char name[100];
    int dj;
    char  work[10];
};

void main(){
    struct MyStruct card1 = {"姓名:赵子龙",9,"职业:战士"};
    struct MyStruct card2 = { "姓名:关羽", 12, "职业:战士" };
    struct MyStruct card3 = { "姓名:张飞", 6, "职业:战士" };
    struct MyStruct card4 = { "姓名:流浪法师", 6, "职业:法师" };
    struct MyStruct card5 = { "姓名:伊泽瑞尔", 8, "职业:法师" };
    struct MyStruct card6 = { "姓名:光辉女郎", 9, "职业:法师" };
    struct MyStruct card7 = { "姓名:圣枪游侠", 9, "职业:ADC" };
    struct MyStruct card8 = { "姓名:皮诚女警", 9, "职业:ADC" };
    struct MyStruct card9 = { "姓名:大嘴", 9, "职业:ADC" };


    printf("请输入你要选择的职业:1战士  2法师  3ADC\n ");
    int a = 0;
    scanf_s("%d",&a);
    if (a==1)
    {
        printf("你选择了战士\n");
        printf("请选择你要的英雄 1赵子龙 2关羽 3张飞\n");
        int n = 0;
        scanf_s("%d", &n);
        if (n == 1)
        {
            printf("%s\n %d\n %s\n", card1.name, card1.dj, card1.work);
        }
        if (n == 2)
        {
            printf("%s\n %d\n %s\n", card2.name, card2.dj, card2.work);
        }
        if (n == 3)
        {
            printf("%s\n %d\n %s\n", card3.name, card3.dj, card3.work);
        }

    }
    if (a==2)
    {
        printf("你选择了法师\n");
        printf("请选择你要的英雄 1流浪法师 2伊泽瑞尔 3光辉女郎\n");
        int n = 0;
        scanf_s("%d", &n);
        if (n == 1)
        {
            printf("%s\n %d\n %s\n", card4.name, card4.dj, card4.work);
        }
        if (n == 2)
        {
            printf("%s\n %d\n %s\n", card5.name, card5.dj, card5.work);
        }
        if (n == 3)
        {
            printf("%s\n %d\n %s\n", card6.name, card6.dj, card6.work);
        }
    }
    if (a == 3)
    {
        printf("你选择了ADC\n");
        printf("请选择你要的英雄 1圣枪游侠 2皮诚女警 3大嘴\n");
        int n = 0;
        scanf_s("%d", &n);
        if (n == 1)
        {
            printf("%s\n %d\n %s\n", card7.name, card7.dj, card7.work);
        }
        if (n == 2)
        {
            printf("%s\n %d\n %s\n", card8.name, card8.dj, card8.work);
        }
        if (n == 3)
        {
            printf("%s\n %d\n %s\n", card9.name, card9.dj, card9.work);
        }


    }
    system("pause");
}

下讲到了共用体
共用体类型数据和结构体类型数据属于构造函数。
共用体在类型上与结构体相似,
二者的区别:
1结构体每个成员变量占有不同的贮存空间。
2而共用体变量所有成员共享同一内存单元。
3以最长的成员所占的内存作为共用体的储存空间。所有地址同一地址开始储存。
4,采用覆盖技术,在某一时刻,只能让一个成员起作用。

union 共用体标志
{
数据类型 共用体成员1;
数据类型 共用体成员2;
数据类型 共用体成员3;

}
下面的代码是一个任务简单人物的属性
代码还要改进
这个代码的问题在于。当你输入选择之后,会出现属性,但是不能连续输入。

#define _CRT_SECURE_NO_WARNINGS
#include<windows.h> 
#include<stdio.h>
#include <stdlib.h>

struct MyStruct
{
    char  名字[20];  //主信息
    short 等级;       
    char  职业[20];
    int 生命值;  //主属性
    int 魔法值;   
    int 内功值;   
    int 物理防御;
    int 魔法防御;
    int 物理攻击;
    int 魔法攻击;
    int 道术攻击;

                //副属性
    int 闪避;
    int 准确;
    int 幸运;
    int 诅咒;
    int 暴击率;
    int 暴击力;
              //背包属性
    int 红药;
    int 蓝药;
    int 天山雪莲;

};
void mai()
{
    srand(time(0));
    struct MyStruct card1;
    sprintf(card1.名字,"九月我不撸");
    card1.等级 = 60;
    sprintf(card1.职业, "战士");
    printf("人物基本属性\n");
    printf("姓名=%s,等级=%d,职业=%s\n", card1.名字,card1.等级,card1.职业);
    card1.生命值 = 15516;
    card1.魔法值 = 2430;
    card1.内功值 = 205;
    printf("\n人物主属性\n");
    printf("生命值=%d\n 魔法值=%d\n 内功值=%d\n", card1.生命值, card1.魔法值, card1.内功值);
    card1.物理防御 = 549 + rand() % 248;
    card1.魔法防御 = 155 + rand() % 265;
    card1.物理攻击 = 435 + rand() % 563;
    card1.魔法攻击 = 10 + rand() % 41;
    card1.道术攻击 = 10 + rand() % 41;
    printf("物理防御=%d\n 魔法防御=%d\n 物理攻击=%d\n 魔法攻击=%d\n 道术攻击=%d\n", card1.物理防御, card1.魔法防御, card1.物理攻击, card1.魔法攻击,card1.道术攻击);
    card1.闪避 = 8;
    card1.准确 = 30;
    card1.幸运 = 0;
    card1.诅咒 = 0;
    card1.暴击率 = 0;
    card1.暴击力 = 0;
    printf("\n人物副属性\n");
    printf("");
    printf("闪避=%d\n 准确=%d\n 幸运=%d\n 诅咒=%d\n 暴击率=%d\n 暴击力=%d\n", card1.闪避, card1.准确, card1.幸运, card1.诅咒, card1.暴击率, card1.暴击力);

    system("pause");
}
void mai1(){
    struct MyStruct card1;
    card1.红药 = 3;
    card1.蓝药 = 5;
    card1.天山雪莲 = 6;
    printf("\n人物背包\n");
    printf("红药=%d\n 蓝药=%d\n 天山雪莲=%d\n", card1.红药, card1.蓝药, card1.天山雪莲);
    system("pause");

}

void main(){
    printf("请选择你要查看的属性:1战士  2背包   \n");
        int a = 0;
        scanf_s("%d",&a);
        if (a==1)
        {
            mai();
        }
         if (a == 2)
        {
            mai1();
        }

        else
        {
            printf("你的选择不正确");
            int a = 0;
            scanf_s("%d", &a);
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值