08-复合类型

结构体的定义和初始化

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//定义一个结构体数据类型
//关键字 struct 代表这个是一个结构体类型,
//stu   是这个结构的名字
//整个结构体的类型是   struct  stu
// 结构体类型struct  stu   {}中是结构体的成员,一个有3个成员,每个成员的类型可以是
//任意的类型
//定义结构体类型时,{}后面记得加分号
//注意定义结构struct  stu,它只是一个类型,一个模板,没有空间,不可以给结构体成员赋值
struct  stu
{
        int id ;
        int age;
        char name[128];
} a;//定义类型时,同时定义了两个结构体变量struct  stu a;
struct  stu c;
int main()
{
        //struct  stu d = {1,20,"ubunqu"};
        //struct  stu d = { .age=20 };//给部分成员初始化,其他成员内容为0
        struct  stu d;
        //如何给结构体成员赋值(如何操作结构体成员)
        //如果通过结构体变量操作结构体成员,使用点域.操作
        /*d.id = 2;
        d.age = 20;
        strcpy(d.name , "world");
        printf("%d %d %s\n",d.id,d.age,d.name);*/
        //如果通过结构体的地址操作结构体成员,使用->
        (&d)->id = 3;
        (&d)->age = 20;
        strcpy((&d)->name, "world");
        printf("%d %d %s\n", (&d)->id,(&d)->age,(&d)->name);
        system("pause");
        return 0;
}

结构体指针

![[Pasted image 20230817213426.png]]

结构体套指针

![[Pasted image 20230817213442.png]]

![[Pasted image 20230817213505.png]]

结构体数组作为函数的形参

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct  c13
{
        int  id;
        char name[128];
};
//void set_num(struct  c13 num[5] )
void set_num(struct  c13 *p,int n )
{
        for (int i = 0; i < n; i++)
        {
        //      (*(p + i)).id = i + 10;
               p[i].id = i + 10;
               //(p + i)->id = i + 10;
               char buf[128] = "";
               sprintf(buf,"%d%d%d",i,i,i);
               strcpy(p[i].name,buf);
        }
}
int main()
{
        struct  c13 num[5];
        memset(num,0,sizeof(num));
        set_num(num,sizeof(num)/sizeof(num[0]));// num  = &num[0] 
        for (int i = 0; i < sizeof(num) / sizeof(num[0]); i++)
        {
               printf("%d %s\n",num[i].id,num[i].name);
        
        }
        system("pause");
        return 0;
}

const修饰的结构体指针变量

int main()
{
        struct  c13 a;
        struct  c13 b;
        // struct  c13  const *p = &a;
        //p->id = 100; err  const修饰的是*,不能通过指针p取修改p指向的那块空间
        struct  c13   * const p = &a;
        //p = &b;  const修饰的是指针变量p,不能修改p本身的内容(指向)
        system("pause");
        return 0;
}

共用体和大小端

共用体:多个变量共用同一块内存空间’'同一时刻,只能有一个变量起作用
大小端:
![[Pasted image 20230823172225.png]]

使用共用体验证大小端


union  abc
{
        //char a;
        short b;
        char buf[2];
};
int main()
{
        union  abc tmp;
        tmp.b = 0x0102;
        if (tmp.buf[0] == 0x01)
        {
               printf("big\n");
        }
        else
        {
               printf("little\n");
        }
}

枚举

将枚举类型的变量的值一一列举出来,枚举变量的值只可以赋值为{}里面的值,{}里面的值是常量
枚举{}里面列举的常量的值默认是从0开始

enum ab { SUN  , RAIN, SNOW};
int main()
{
        enum ab tmp = SNOW;
        printf("%d %d %d\n",SUN,RAIN,SNOW);
        int  a = 0;
        scanf("%d",&a);
        if (SUN == a)
        {
               printf("sleep\n");
        }
        else if(RAIN == a)
        {
               printf("music\n");
        }
        else if (SNOW == a)
        {
               printf("game\n");
        }
        system("pause");
        return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值