2016-12-06 8 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++コンパイラを使用する必要がある場合は、明示的int *aをキャストする必要があります:

int *h = (int *) a; 

1つの変更は、このコードができること、私は次のエラーを取得することをしようとした場合g++でコンパイルしてください。

+0

MSVCと同じことです。' * h'の逆参照行を追加すると、警告もエラーも発生しません。 –

関連する問題