结构体(2)【C语言】

/*结构体数组*/

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

typedef struct BOOK1{
    int id;
    char name[128];
    float price;
}BOOK2;

int main()
{    
    int i;
    BOOK2 book_0[3]={{1,"aaa",11.11},{2,"bbb"}};
    for(i=0;i<3;i++)
    {
        printf("id=%d,  name:%s,  price=%.2f\n\n"
        ,book_0[i].id
        ,book_0[i].name
        ,book_0[i].price);
    }
    
    BOOK2 book_1[2];
    printf("输入:\n");
    for(i=0;i<2;i++)
    {
        scanf("%d%s%f"
        ,&book_1[i].id
        ,book_1[i].name
        ,&book_1[i].price);
    }
    for(i=0;i<2;i++)
    {
        printf("id=%d,  name:%s,  price=%.2f\n\n"
        ,book_1[i].id
        ,book_1[i].name
        ,(*(book_1+i)).price);
    }

    
}

/*编译结果:
id=1,  name:aaa,  price=11.11

id=2,  name:bbb,  price=0.00

id=0,  name:,  price=0.00

输入:
33 cc 33.3
44 dd 44.4
id=33,  name:cc,  price=33.30

id=44,  name:dd,  price=44.40
*/
/*总结:
结构体数组本质上是一个数组,数组中元素的类型是结构体类型。
使用“结构体关键字 结构体类型 数组名[数组长度]”的格式来定义一个结构体数组。
*/

/*结构体指针*/

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

typedef struct students{
    int id;
    char name[10];
    float score;
}student;

int main()
{    
    student *p=NULL;
    printf("p=%d\n",sizeof(p)); //p=4  p是一个指针  p->id=123  不可直接赋值 p指针要有指向
    student stu;
    p=&stu;
    p->id=123;strcpy(p->name,"abc");p->score=12.3;
    printf("id=%d, name:%s, score=%.2f\n",p->id,p->name,p->score);
    
    student STU[3];
    student *q=&stu;
    int i;
    for(i=0;i<3;i++)
    {
        printf("输入:\n");
        scanf("%d%s%f",&(q+i)->id,(q+i)->name,&(q+i)->score);
    }
    
    for(i=0;i<3;i++)
    {
        printf("id=%d, name:%s, score=%.2f\n"
                ,(*(p+i)).id,(p+i)->name,(p+i)->score);
    }
    
    
}

/*编译结果:
p=4
id=123, name:abc, score=12.30
输入:
1 a 11
输入:
2 b 22
输入:
3 c 33
id=1, name:a, score=11.00
id=2, name:b, score=22.00
id=3, name:c, score=33.00
*/
/*总结:
结构体指针本质上是一个指针,指针的类型是结构体类型。
定义格式:“结构体关键字 结构体类型 *变量名”

p是一个指针  p->id=123  不可直接赋值 p指针要有指向(p=&stu)
(q+i)->id:   ->优先级高
(*(p+i)).id:  .的优先级高于*
*/

/*共用体*/

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

typedef union students{
    int id;
    char name[10];
    float score;
}student;
union NUM{
    int a;
    char b;
};

int main()
{    
    //共用体结构类型字节大小
    student stu;
    printf("sizeof(int)+sizeof(char)*10+sizeof(float)=%d\n",sizeof(int)+sizeof(char)*10+sizeof(float));
    printf("stu=%d\n",sizeof(stu));
    printf("union students = %d\n",sizeof(union students));
    
    //共用体赋值输出
    printf("输入:\n");
    student *p=&stu;
    scanf("%d%s%f",&p->id,p->name,&p->score);
    printf("id=%d,  name:%s,  score=%.2f\n",p->id,p->name,p->score);
        
    //共用体判断大端(小尾)
    union NUM num;
    union NUM *q=&num;
    q->a = 0x12345678;    //int 4字节32位    16进制一位==2进制四位
    printf("q->b = %#x",q->b);
    
}

/*编译结果:
sizeof(int)+sizeof(char)*10+sizeof(float)=18
stu=12
union students = 12

输入:
123 abc 12.34
id=1095069860,  name: pEA        ,  score=12.34

q->b = 0x78
*/
/*总结:
    4                 12                   12
———     —————     —————     =    12
 int(4)          char(1)            float(4)  
共用体是一个特殊的结构体,使用关键字“union”来表示一个共用体。
共用体中的数据成员共用一个内存空间,成员变量的最新赋值会把之前的数据覆盖掉。
共用体变量在存储器中占用的存储空间就是共用体最大成员变量占用的空间且最终的申请空间是最大类型的整数倍
在windows操作系统下,最终所占字节是成员中最大类型的整数倍
在linux操作系统32位下,最终所占字节是4的整数倍。

小端
            0x78         0x56        0x34         0x12
int  :   ————   ———     ———    ————
            cahr/0         1              2               3
*/

/*枚举类型*/

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

enum num{a,b,c,d};
enum NUM{q,w,e=0,r};

int main()
{    
    printf("a=%d\n",a);
    printf("b=%d\n",b);
    printf("c=%d\n",c);
    printf("d=%d\n\n",d);
    
    printf("q=%d\n",q);
    printf("w=%d\n",w);
    printf("e=%d\n",e);
    printf("r=%d\n\n",r);
    
}

/*编译结果:
a=0
b=1
c=2
d=3

q=0
w=1
e=0
r=1
*/
/*总结:
枚举类型是一组整形常量
格式定义:“enum 枚举类型名{枚举常量1,枚举常量2,枚举常量3,….,枚举常量n}”
枚举常量默认从0开始,后面一个是前面的成员变量加1。
*/
 

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值