void*的含义
1.指针初始化赋值:
HX711_Calibration_TypeDef *HX711_Calib = {0, 1};
是不正确的初始化方式,原因如下:
-
问题描述:
- 这是尝试为指针类型 (
HX711_Calibration_TypeDef *
) 变量分配一个直接的复合字面量,语法上无效。 {0, 1}
是一个结构体的初始化方式,而非指针的初始化方式。
- 这是尝试为指针类型 (
-
正确的初始化方式:
- 如果你要初始化一个指向
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
被初始化为 0
,scale
被初始化为 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}
只能用来初始化非指针的结构体变量,不能直接用于初始化指针。