1

変数へのポインタを渡したい。整数の場合もあれば、文字の場合もあります。以下の例では、ポインターpを渡しますCreateObjectが、ポインターが指す変数の値を取得しようとすると、厄介な結果が得られます。

int i =0;
int *p = malloc(sizeof(int));
*p = i;

ObjectP object = CreateObject(p);

それをintにキャストして表示したいとします:

void CreateObject(void *key)
{
   printf("%d\n", (int)key);
}

0 ではなく 160637064 が表示されます。以前に割り当てた整数の代わりに何を取得していますか?また、現在の値の代わりにそれを取得するにはどうすればよいですか?

4

3 に答える 3

6

これ:

(int) key

ポインターを逆参照して、ポインターが指すデータにアクセスするのではなく、ポインター値 (アドレス) 自体を整数として再解釈します。

必要なもの:

printf("%d\n", *(int *) key);
于 2012-12-25T13:35:31.580 に答える
3

整数へのポインタを型キャストしています。これは、単にアドレスを取得することを意味します。結局のところ、ポインターは単なるアドレスです。

おそらく、ポインターをキャストする代わりに逆参照する必要があります。*(int*)keyそれをするでしょう。

于 2012-12-25T13:35:53.823 に答える
3

つまり、ポインターを印刷しています。指している値ではなく、アドレスです。

これを使用して値を出力します。

void CreateObject(void *key)
{
   printf("%d\n", *(int*)key);
}
于 2012-12-25T13:36:24.050 に答える