【Linux开发初步】00000000H_C结构体应用回顾(1)

40 篇文章 0 订阅

程序在Linux环境下编译的,目的是回顾梳理一下之前的基础知识,方便忘的时候查看。

/***********************************************
 * File name:   // book2.c
 * Author:      // doublepeng
 * Version:     // V1.0
 * Description: // 测试、验证结构体的用法。
 * Other:       // 
 * Log:         // 2020/07/10
 *              // 新建。
 * 
 ************************************************/
 #include<stdio.h> 
 #include<string.h>

 typedef unsigned char  uint8;
 typedef unsigned short uint16;
 typedef unsigned long  uint32;

 //消除内存空隙
 #pragma pack(1)
 struct msg_str{
    uint32  ID;
    uint16  length;
    uint8   data[64];
 };//为了验证字节对齐的问题,故意如此排布成员 

 int main()
 {
    struct msg_str *P_msg, CAN_msg, tmp_msg;
    printf("This is a test project!\n");
    /*********************************************************************************************/
    printf("int:%d \n short:%d \n char:%d \n", sizeof(int), sizeof(short), sizeof(char));
    printf("uint32:%d \n uint16:%d \n uint8:%d \n", sizeof(uint32), sizeof(uint16), sizeof(uint8));
    
    //输出结构体的大小,方式一
    printf("msg_str size: %d \n", sizeof(struct msg_str));
    
    //输出结构体的大小,方式二
    printf("msg_str size: %d \n", sizeof(CAN_msg));
    //总结:如果不对齐,结构体实际占用80字节;如果对齐,则实际占用74字节。
    /*********************************************************************************************/
    printf("\r\n");
    //初始化结构体变量
    memset(&CAN_msg, 0, sizeof(CAN_msg));
    
    CAN_msg.ID     = 0x18DA0034;
    CAN_msg.length = 8;
    strcpy(CAN_msg.data, "CAN messages.");
    
    printf("CAN_msg.ID:0x%08X \n", CAN_msg.ID);
    printf("CAN_msg.length:%d \n", CAN_msg.length);
    printf("CAN_msg.data:%s \n", CAN_msg.data);

    printf("\r\n");

    P_msg = &CAN_msg;

    P_msg->ID      = 0x18DA00DF;
    P_msg->length  = 40;
    strcpy(P_msg->data, "J1939 protocol received frames.");

    printf("P_msg->ID:0x%08X \n", P_msg->ID);
    printf("P_msg->length:%d \n", P_msg->length);
    printf("P_msg->data:%s \n", P_msg->data);
    printf("\r\n");
    
    //验证memcpy函数,拷贝结构体变量
    memcpy(&tmp_msg, &CAN_msg, sizeof(struct msg_str));

    printf("tmp_msg.ID:0x%08X \n", tmp_msg.ID);
    printf("tmp_msg.length:%d \n", tmp_msg.length);
    printf("tmp_msg.data:%s \n", tmp_msg.data);
    //总结:注意CAN_msg中的值已经被改变了。
    /*********************************************************************************************/
}

运行结果:
在这里插入图片描述


参考资料:
【1】C语言技术网
【2】C语言中文网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智驾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值