c - 「異なるサイズの整数からポインタへのキャスト」とはどういう意味ですか?

c pointers

これは私のコードがどのように見えるかの例です:

void *a = NULL;
void *b = //something;
a = (void *)(*((char *)b + 4));


(b + 4)が指している値は、aに格納したいアドレスです。コンパイルしようとすると、「警告:異なるサイズの整数からポインターへのキャスト」が表示されます。これはどういう意味ですか、それを修正するにはどうすればよいですか?

編集:明確にするために、私は「a」が「b」より4バイト大きいアドレスを指すことを望まない。私のプログラムでは、((char *)b + 4)に格納されている値自体が別のポインターであることを知っています。このポインターを 'a'に格納したいと思います。
答え
これはchar*です:

(char *)b + 4


つまり、これは:

*((char *)b + 4)


charです。次に、そのcharvoid*にキャストすると、コンパイラーは不平を言います。 Cで手動でvoid*にキャストする必要はないので、これで十分です。

a = (char *)b + 4;




コメントの更新:このように聞こえます:

a = *(char **)((char *)b + 4)
関連記事

c - LIFOの順序ではなく、アドレスの順序でフリーリストを整理する利点は何ですか?

c++ - C++でのCライブラリ関数の実装

c - malloc実装での空きリストの維持

c - Cのファイルから数値を読み取る

c - すでに印刷されている改行を削除するVT100エスケープシーケンス?

c - 独自のベーシックディスクスキャナーを作成する方法

c++ - 警告—ポインターと組み合わせた算術式の不審な切り捨て

c++ - GMP整数をベースN整数に変換する

c++ - GTKでキーボードとマウスの入力を取得するにはどうすればよいですか?

c - $ PATHのディレクトリをリストまたは配列として取得する方法は?