C-- C语言进阶-指针

void*的含义

1.指针初始化赋值:

HX711_Calibration_TypeDef *HX711_Calib = {0, 1}; 是不正确的初始化方式,原因如下:

  1. 问题描述:

    • 这是尝试为指针类型 (HX711_Calibration_TypeDef *) 变量分配一个直接的复合字面量,语法上无效。
    • {0, 1} 是一个结构体的初始化方式,而非指针的初始化方式。
  2. 正确的初始化方式:

    • 如果你要初始化一个指向 HX711_Calibration_TypeDef 类型的指针,需要分配内存,并对其成员进行赋值。

假设 HX711_Calibration_TypeDef 定义如下:

typedef struct {
    int offset;
    int scale;
} HX711_Calibration_TypeDef;

初始化方式 1:静态分配(直接变量)

HX711_Calibration_TypeDef HX711_Calib = {0, 1}; // 初始化结构体

此时,HX711_Calib 是一个结构体变量,offset 被初始化为 0scale 被初始化为 1


初始化方式 2:动态分配(指针方式)

如果你希望用指针表示,需要分配内存后再初始化:

HX711_Calibration_TypeDef *HX711_Calib = malloc(sizeof(HX711_Calibration_TypeDef));
if (HX711_Calib != NULL) {
    HX711_Calib->offset = 0;  // 设置 offset
    HX711_Calib->scale = 1;   // 设置 scale
}

记得在程序结束或不再需要时释放分配的内存:

free(HX711_Calib);

初始化方式 3:静态初始化指针(指向已有对象)

如果你不希望动态分配内存,而是将指针指向一个现有的变量:

HX711_Calibration_TypeDef HX711_Calib_Instance = {0, 1}; // 静态分配并初始化
HX711_Calibration_TypeDef *HX711_Calib = &HX711_Calib_Instance; // 指针指向静态分配的对象

总结

  • 使用静态分配时,直接声明结构体变量并初始化即可。
  • 使用动态分配时,分配内存后通过指针操作成员变量。
  • 注意指针操作的语法差异,动态分配需要用 -> 操作符,静态变量通过 . 操作符访问成员。

错误回避: {0, 1} 只能用来初始化非指针的结构体变量,不能直接用于初始化指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值