2016-12-06 83 views
-3
void test(void *a) 
{ 
    int *h = a; //error 
} 
int main(int argc, char const* argv[]) 
{ 
    int z = 13; 

    test(&z); 

    return 0; 
} 

如果我想保留void * a作为测试函数,我该如何获得错误行工作?在C中传递int引用?

+4

这是完全有效的C代码。我的猜测是你正在使用C++编译器,在这种情况下,你需要在你的'test'函数中明确地将'a'转换为'int *'。 –

+1

什么是错误,我得到的是一个*未使用变量'h'的警告(使用'-Wall')* – cdarke

回答

4

我能够编译和gcc运行下面没有任何警告或错误:

#include <stdio.h> 

void test(void *a) 
{ 
     int *h = a; 
     printf("test: %d\n", *h); 
} 

int main(int argc, char const* argv[]) 
{ 
     int z = 13; 
     test(&z); 
     return 0; 
} 
你会得到你的指示线的错误

唯一可能的原因是,您使用的是C++编译器(g++也许?)。如果我尝试,我得到以下错误:

 
error: invalid conversion from ‘void*’ to ‘int*’ 

如果您需要使用C++编译器,你需要显式转换aint *

int *h = (int *) a; 

这一个变化让这个代码编辑g++以及。

+0

与MSVC相同 - 添加行解引用'* h'不会产生警告或错误。 –