C 仕様 (主に C99) を最善を尽くして読むと、void *
これらの型のいずれかの間でキャスト (または の暗黙的な変換動作が適用される場合は暗黙的に変換) が有効であると考えられます。
void *
、char *
、signed char *
、unsigned char *
これにより未定義の動作がトリガーされず、それらのポインターが同じ基本表現を持つことが保証されることを期待しています。
したがって、合法的に逆参照、型キャスト、および/またはそれを3つのchar型ポインターの1つに割り当てることができるアドレスをすでに指しているこれら4つの型のいずれかのポインターを取得し、それを逆参照してアクセスすることが可能でなければなりません唯一の違いは、コードがその場所のデータをchar
、signed char
、またはとして扱うかどうかunsigned char
です。
これは正しいです?これが真実ではないC標準のバージョンはありますか(標準void *
化前のCの型の欠如は耐えられません)?
PSこの質問は、他の多くの質問を渡すことで断片的に回答されていると思いますが、これが明示的に述べられている/確認されている単一の明確な回答を見たことはありません.