【发布时间】:2016-08-05 15:19:03
【问题描述】:
我在 C 中有一个函数,它需要接收指向数组的指针(具有未指定的类型)。
为此,我使用 void**,因为我会使用 void* 来接收未指定元素的数组。
不幸的是,有一个问题:编译器发出警告(从不兼容的指针类型传递 'f' 的参数 1)。如果我忽略警告并尝试执行程序,一切都会按预期工作。
摆脱警告的唯一方法是将我尝试传递给函数的任何内容都转换为 void**。
为什么 C 会这样?有没有更好的方法来解决警告?
PS:我需要使用带有标志 -std=gnu89 -pedantic -Wall 的 GCC 进行编译
示例
int f(void** param){ return 1; }
int main(){
int *arr = malloc(sizeof(int) * 20);
int i;
for(i=0; i < 20; i++) arr[i] = i;
f(&arr);
}
【问题讨论】:
-
int f(void** param){ return 1; }-->int f(void* param){ return 1; },不要使用**,可以使用单个指针读取指向数组的指针(void *) -
@AlterMann 我想更改
arr的分配如何? -
@SouravGhosh 这正是我需要完成的。
-
我想你可以从this question 及其答案中学到一些东西。不要只是略读它。值得花时间。
-
@SouravGhosh,那么,您需要取消引用函数内部传递的内容,
*(int **)param = newaddress;
标签: c void-pointers