1. ホーム
  2. c

[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。

2022-01-22 16:07:12

質問

私は、void * を使って基本的なポインタ演算をしようとしています。 私の実際のコードでは、sizeofを使用してオフセットを計算し、その後乗算しています。 以下は、この問題のインスタンスを単体で表示するためのサンプルコードです。

void * p;
p = 0;
p = p + 1;

C言語(C++ではない)のMSVCコンパイラを使用しています。

というエラーが出ます。

expression must be a pointer to a complete object type  

このエラーが何を言おうとしているのか理解できません。 ここにはオブジェクトも構造体もありません。

どうすればいいですか?

ポインタの演算は、常にポインタ先のオブジェクトのサイズに比例します。 ポインタのインクリメントは char* はアドレスが1つ進みますが int* は、通常4(バイト)になるはずです。 しかし void はサイズが不明なので、ポインタ演算で void* は標準では認められていません。 アドレスを数値のように操作したい場合は、まず適切な型にキャストしてください。 char* を使用するか intptr_t .