c - 将数字/字符/字符串发送到 void* 函数

标签 c void-pointers

有没有办法做这样的事情:?

void set(void* data, void *value, t_flags type)  
{
    if (type & INT)
        *(int*)data = *(int*)value;
    if (type & UINT)
    (...)
}

int i;  
set(&i, 42, INT);

我的 set 函数有效,但我不知道如何用数字、字符 '' 或字符串 ""调用它。

编辑:我忘记了最后一个参数,但问题来自 42 个参数。

最佳答案

一些事情。首先,由于您正在为 value 使用 void*(这是合适的),因此您需要传递一个 void* 作为您的第二个参数, 而不是常数。这可以将一个变量复制到下一个变量,但还有更有效的方法。

其次,请注意,要传递一个字符串,您需要传递一个指向 char 指针的指针,char* 将由函数设置。 (这取决于你是“软拷贝”还是“硬拷贝” - 即指针是指向内存中的同一位置还是指向同一字符串的另一个副本。你说你有 set实现,所以我猜你已经按照你想要的方式拥有它。

您没有包含您的 t_flags 枚举,所以我猜到了合适的值。

char  c = 'c';
char* str = "str";
int   i = 42;
char  c2;
char* str2;
char  i2;

set(&c2, &c, CHAR); /* presumably you have a CHAR flag? */
set(&str2, &str, CHARPTR); /* presumably you have a CHARPTR flag? */
set(&i2, &i, INT);

对我来说更大的问题是你为什么要这样做,特别是因为在你的旗帜中你已经需要知道类型。简单得多(并且具有更好的类型检查):

c2 = c;
str2 = str;
i2 = i;

我假设这只是为了学习函数,或者它已针对复杂问题进行了大量简化。无论哪种方式,这就是您的做法。

关于c - 将数字/字符/字符串发送到 void* 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20638232/

相关文章:

c++ - 如何让我的应用程序使用 Windows 主题?

在 C 中创建文件

c - 反转 void 数组和要转换成的数据类型

c - 将 argv[1] 作为参数传递给 pthread_create。

c - 使用 for 循环或列出操作会更快吗?

c - 我的词法分析器遇到困难

C void指针和指针比较

C:通过在函数中转换 void 指针来声明不同的类型

c - 如何将函数内的二维数组返回到 C 中的 main

c - 不理解空指针/如何转换? (C语言编程)