二、指针使用的注意事项之一

1.指针变量作为形参时,此指针变量指向什么类型的数据,在内存中一次取值大小是按照此类型的大小取的;

如TestPointer()函数中,uint32*和uint8*在一次取值时,取的字节数是不同的,赋值给同一个uint16的变量时,uint32会截取低的2个字节;而uint8的高字节会补0。

2.在定义结构体变量时,会存在对齐的问题,尽量小字节的在上,大字节的在下:

如结构体TestDataType_struct,下列两种形式在内存中的存储是不同的。

typedef struct

{

        uint16_t DataID;

        uint32_t Data;

        uint8_t  BlockID;

} TestDataType_struct1;

typedef struct

{

        uint8_t  BlockID;

        uint16_t DataID;

        uint32_t Data;

} TestDataType_struct2;

TestDataType_struct1内存中的存储方式:会在DataID后面补齐2个字节,与uint32的Data对齐;

TestDataType_struct2内存中的存储方式:会在BlockID后面补齐1个字节,与uint16_t 的DataID对齐;

3.在处理指针变量时,最好用下面的强制类型转换的方式,先将指针变量强制转换为想要的变量类型的指针,然后进行赋值处理等,如

CCC_struct_Pointer=(TestDataType_struct*)Data;

BBB_struct.BlockID=CCC_struct_Pointer->BlockID;

BBB_struct.DataID=CCC_struct_Pointer->DataID;

BBB_struct.Data=CCC_struct_Pointer->Data;

4.为了避免上面的问题,在运用指针变量作为形参时,最好使形参和实参的类型保持一致,这样就不会存在问题,如

void TestPointer(TestDataType_struct* Data)

{

        BBB_struct.BlockID=Data->BlockID;

        BBB_struct.DataID=Data->DataID;

        BBB_struct.Data=Data->Data;

}

  • 12
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值