ポインターの出力に問題がある。以下のプログラムをコンパイルしようとするたびに、次のエラーが発生します。
pointers.c:11: warning: format ‘%p’ expects type ‘void *’, but argument 2 has type ‘int *’
私はここで明らかに簡単なものを見逃していますが、私が見た同様のコードの他の例から、これはうまくいくはずです。
ここにコードがあります、どんな助けでも素晴らしいでしょう!
#include <stdio.h>
int main(void)
{
int x = 99;
int *pt1;
pt1 = &x;
printf("Value at p1: %d\n", *pt1);
printf("Address of p1: %p\n", pt1);
return 0;
}
Intポインターをvoidにキャストするだけです:
_printf( "Address of p1: %p\n", ( void * )pt1 );
_
コードは安全ですが、_-Wformat
_警告フラグを使用してコンパイルしているため、printf()
およびscanf()
の呼び出しを型チェックします。
簡単な警告が表示されることに注意してください。コードはおそらく期待どおりに実行されます。
"%p"
printfへの変換指定子には、void*
引数; pt1
はタイプint*
。
警告は、int*
およびvoid*
は、奇妙な実装では、異なるサイズまたはビットパターンまたは何かを持つ場合があります。
int*
からvoid*
キャスト付き...
printf("%p\n", (void*)pt1);
...そして、奇妙な実装であってもすべてがうまくいきます。
この場合、コンパイラは警告に対して少し熱心です。コードは完全に安全です。オプションで警告を削除できます:
printf("Address of p1: %p\n", (void *) pt1);
メッセージにはすべてが記載されていますが、それ自体はエラーではなく単なる警告です。
printf("Address of p1: %p\n", (void*)pt1);