2016-12-06 50 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'不會產生警告或錯誤。 –