gpt4 book ai didi

c - const void * 指针数组和 Visual C++

转载 作者:行者123 更新时间:2023-12-02 22:16:52 25 4
gpt4 key购买 nike

我在代码片段中定义 const void * 指针数组时遇到问题 - Visual C++ 提示我尝试的任何组合:

void *call_func_cdecl(void *func, const void *const *args, int nargs);

void vlogprintf(const char *format, va_list va) {
int nargs;
void **args;

args = malloc(...);

args[0] = format;
// fill the rest...

call_func_cdecl((void*)logprintf, args, nargs);
free(args);
}

如您所知,free 采用 void *,因此数组本身不应该是常量,但它的元素应该是常量,因为 formatconst void * 并且它是 args 的一个元素。

到目前为止,我尝试了这些:

  • const void **args

    free(args) 行收到 警告 C4090:'function' : different 'const' qualifiers

  • void const **args

    同上

  • void *const *args

    args[0] = format 行出现 error C2166: l-value specified const object

  • void **const args

    同上

最佳答案

无法通过简单的 malloc 分配一个常量指针数组。基本类型就是它们的本质,如果您知道自己在做什么,就可以(或多或少)安全地忽略这些错误。如果你想以“正确”的方式去做,你可以尝试这样的事情(代码没有实际使用顺序,只是随机片段):

struct constvoid {
const void * ptr;
}

void *call_func_cdecl(void *func, struct constvoid *args, int nargs);

{
struct constvoid* args = malloc(...);

args[0].ptr = format;
//fill the other

call_func_cdecl((void*)logprintf, args, nargs);
free(args);
}

关于c - const void * 指针数组和 Visual C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14317020/

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