gpt4 book ai didi

c - 如何将 void * 初始化为已知数据类型

转载 作者:行者123 更新时间:2023-11-30 17:41:06 26 4
gpt4 key购买 nike

我有一个结构数组,其中包含一堆信息,这些信息在编译时将成为常量。我正在尝试初始化数组,以便与特定变量相关的所有信息都位于一个位置。我遇到的问题是数据类型可以是 var_ptr 或 var_max 的任何数字类型(另一个成员跟踪要处理的类型)。

我使用 void* 作为指针,但我需要某种方法来分配内存并初始化它。请参阅下面注释掉的 .var_max = &(23),了解我想要完成的任务的示例。

typedef enum{
INT,
CHAR,
LONG,
LONGLONG,
FLOAT
} data_type_t;


typedef struct param_t param_t;


struct param_t{
const char* name; //Text name of variable
const void* var_ptr; //Pointer to variable
const void* var_max; //Pointer to max limit of var_ptr, same datatype
int (*p_func)(const param_t*, char *);//Function to process parameter variable
const data_type_t data_type; //Data type of
};


int MinMax_handler(const param_t *, char *);

extern int Hours, Minutes, Seconds;
/******************Variables go here******************/
const param_t param[] =
{
{.name = "DEV_RTC_HR", .var_ptr = &Hours, /*.var_max = &(23),*/ .p_func = &MinMax_handler, .data_type = INT},
{.name = "DEV_RTC_MIN", .var_ptr = &Minutes, .p_func = &MinMax_handler, .data_type = INT},
{.name = "DEV_RTC_SEC", .var_ptr = &Seconds, .p_func = &MinMax_handler, .data_type = INT}
};
/*****************************************************/

注释掉 .var_max = &(23) 可以让它编译并且看起来工作正常。

听起来 union 可能会起作用,但会占用更多内存,因为大多数数据类型都是 int (16 位),但我需要适应 long long (64 位)。

我需要将其限制为 C。最终版本将是 50-150 个数组元素并在外部自动生成。

最佳答案

通过执行.var_max = &(23),您试图创建一个指向文字值的指针,这是没有意义的

您可以执行以下两项操作之一:

  1. 预分配内存,将值 23 放在那里,并将其用作指针

  2. 假设,当数据大小适合 void *(即 64 位或更少,假设您使用的是 64 位架构)时,您可以将值直接在指针中

    .var_max = (void *)23

关于c - 如何将 void * 初始化为已知数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21263132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com