10
#include <stdio.h>
void pass(void* );
int main()
{
    int x;
    x = 10;
    pass((void*)x);
    return 0;
}
void pass(void* x)
{
   int y = (int)x;
   printf("%d\n", y);
}


output: 10

上記のコードからの私の質問..

  1. 通常の変数を void* またはポインター変数に型キャストするとどうなりますか?

  2. 関数定義では引数がポインタ変数であるため、変数のアドレスを関数に渡す必要があります。しかし、このコードは通常の変数を渡します..

この形式は、Linux pthread プログラミングで使用されています... 私は初心者レベルの C プログラマーです。このプログラムをLinux gccコンパイラでコンパイルしています..

4

3 に答える 3

0

glibがこの種の変換用のマクロを提供する理由を読んでください。ここでテキストを繰り返す必要はありません。要点は、ポインタのサイズはプラットフォームに依存するということです。

于 2013-04-15T14:00:47.183 に答える
0

を使用する予定があり、その関数をpthreadsに渡す予定がある場合は、使用する予定の引数を/にする必要があります (スレッド化された関数が 1 つの int だけを必要とする場合でも)。passpthread_createmallocfree

整数アドレス ( など&x) を使用するのはおそらく間違っています。実際、実行する各変更は動作xに影響しpassます。

于 2013-04-15T14:01:10.287 に答える