关于#c语言#的结构体问题,如何解决?


#include<stdio.h>
struct water_level_meter_handle_t
{
    enum water_level_status_e water_level_status;//默认是0
};

enum water_level_status_e
{
    NONE_WATER_LEVEL_STATUS = 0,
    LOW_WATER_LEVEL_STATUS,
    MEDIUM_WATER_LEVEL_STATUS,
    HIGH_WATER_LEVEL_STATUS
};
struct water_level_meter_handle_t water_level_meter_handle;

struct water_level_meter_handle_t* WaterLevelMeter_Handle(void)
{
    struct water_level_meter_handle_t* handle = (struct water_level_meter_handle_t*)&water_level_meter_handle;
    printf("handle = %d\n", *handle);
    return handle;
};
int main() {
    WaterLevelMeter_Handle();
    printf("water_level_status = %d\n", *WaterLevelMeter_Handle());
} 

img

img

为什么结构体函数里的printf会打印两次?

这个警告要怎么取消?

struct water_level_meter_handle_t* handle = (struct water_level_meter_handle_t*)&water_level_meter_handle;

这条语句没太懂是什么意思,是定义一个结构体指针,然后把值传回吗

但是这个函数又是结构体指针变量,我懵逼了

求解答

struct water_level_meter_handle_t * handle = (struct water_level_meter_handle_t * )&water_level_meter_handle;
这个就是将water_level_meter_handle强制转换为water_level_meter_handle_t 结构体类型,因为water_level_meter_handle本身就是struct water_level_meter_handle_t 类型,所以确实没啥意义,直接返回&water_level_meter_handle就行
==========
int main() {
WaterLevelMeter_Handle();
printf("water_level_status = %d\n", *WaterLevelMeter_Handle());
}
这里WaterLevelMeter_Handle()你写了两次,自然输出两次了啊