C语言结构体,共用体及typedef

本文详细介绍了C语言中的结构体定义与使用,包括静态定义和边定义边使用,以及通过指针访问结构体成员。同时探讨了共用体的概念,指出共用体成员共享内存的特点,并展示了typedef用于定义新数据类型的应用。
摘要由CSDN通过智能技术生成

结构体

        定义

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

struct student //结构体
{
    int num;       //**** 四个字节
    char name[10]; //**** **** **(**) 字节对齐 剩下的两个会补充两个 12个字节
    double garde;  //**** **** 八个字节
}stu3={3,"wangwu",88},stu4={4,"taoliu",82};

int main(int argc,char *argv[]){

    struct student stu1,stu2 ={2,"lisi",83.5};

    stu1.num =1;
#if 0 //条件编译 不编译

    //stu1.name ="zhangsan"; error!
    stu1.name[0]='z';
    stu1.name[1]='h';
    stu1.name[2]='a';
    stu1.name[3]='n';
    stu1.name[4]='g';
#endif

    strcpy(stu1.name,"zhangsan");
    stu1.garde =94.3;

    printf("%d %s %f\n",stu1.num,stu1.name,stu1.garde);
    printf("%d %s %f\n",stu2.num,stu2.name,stu2.garde);
    printf("%d %s %f\n",stu3.num,stu3.name,stu3.garde);
    printf("%d %s %f\n",stu4.num,stu4.name,stu4.garde);
    printf("%ld  %dl\n",sizeof(struct student),sizeof(stu1));


    return 0;
}

     

          使用方式:

                1.先定义再使用(如stu1)

                2.边定义边使用(如stu2)

                3.定义结构体时赋值(如stu3,stu4,多个用逗号隔开)

                4.以数组形式赋值(如 s[3] ,也可以在结构体后面直接赋值如 s1[2] )

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

struct student
{
    int num;
    char name[10];
    double garde;
}s1[2]={{4,"lisi",89.5},{5,"wangwu",54}};

int main(int argc,char *argv[]){

    struct student s[3]={{1,"zhaoyi",60},{2,"liuer",75.5},{3,"zhangsan",100}};
/*
    可以一个一个赋值,也可以和上面一样一起赋值
    struct student s[2];
    s[0].num =1;
    strcpy(s[0].name,"zhaoyi");
    s[0].garde =60;
*/    
    int i;
    for(i =0;i<3;i++){
        printf("%d %s %f\n",s[i].num,s[i].name,s[i].garde);
    }
    for(i =0;i<2;i++){
        printf("%d %s %f\n",s1[i].num,s1[i].name,s1[i].garde);
    }

    return 0;
}

        通过指针访问值

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

struct student
{
    int num;
    char name[10];
    double garde;
};

int main(int argc,char *argv[]){

    struct student *p;
    struct student stu1 ={2,"lisi",83.5};

    p =&stu1;

    printf("%d %s %f\n",stu1.num,stu1.name,stu1.garde);
    printf("%d %s %f\n",(*p).num,(*p).name,(*p).garde);
    printf("%d %s %f\n",p->num,p->name,p->garde);

    return 0;
}

                1. 通过原名来访问

                2. 通过 (*p).num ... 来访问

                3. 通过 p->num ...来访问 之后常用这个

共用体

        概念

                在c语言中,不同数据类型的数据可以使用共同的存储区域,这种数据构造类型成为共同

        体,简称共用,又称联合体

                共用体在定义,说明和适用形式上与结构体相似,两者本质上的不同仅在于使用内存的

        方式上

        定义一个共用体的一般形式

                union 共用体名

                {

                        成员表列;

                };

#include <stdio.h>

union gy
{
    int a;
    char b;
};

int main(int argc,char *argv[]){
    
    union gy n;
    n.a=0x12345678;

    printf("%ld\n",sizeof(union gy)); // a,b成员共用的内存 只有四个字节
    printf("%#x\n",n.a);
    printf("%#x\n",n.b);

    n.b ='b';     //如果b进行改变 那么a的值也会改变
    printf("%#x\n",n.a);
    printf("%#x\n",n.b);

    return 0;
}

               

                        共用体中改变其中一个,另外的也会随之改变

                共用体嵌套结构体

                

                        访问用n.f.c  ...

typedef

        定义

                        在C语言中,允许使用关键字typedef定义新的数据类型

        语法

                        typedef    <已有数据类型>  <新数据类型>

                        如: typedef  int INTEGER;

                        这里重新定义了数据类型INTEGER,其等价于int

                                INTEGER   I; <==>  int  i;

                        

        使用方法

                        1. 在main函数中定义 (如STU)

                        2. 直接在结构体上定义 (如STU1) ,如果直接重命名,结构体就可以不需要取名了

                        3. 定义指针访问(如 *STU_P)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值