int
を期待する関数にを渡したいchar *
。
関数ヘッダーは次のようになります。
void swapEndian(char *pElement, unsigned int uNumBytes)
そしてintで関数を呼び出します(私は知っています、これはうまくいきません..)
int numLine;
swapEndian(numLine, sizeof(int));
では、numline をこの関数に渡すにはどうすればよいでしょうか。
すでに提案されているchar*キャストは機能します
swapEndian( (char*) &numLine, sizeof(int) );
...ただし、swapEndianを変更してvoid *を取得できる場合は、キャストが不要になり(これは基本的にvoidポインターの目的です)、キャストに関連する潜在的な問題や将来の問題も回避できるため、より良いでしょう。操作自体..。
あなたがただ欲しいかのように聞こえます:
swapEndian( (char*) &numLine, sizeof(int) );
他の答えに加えて、swapEndian
その名前が示唆していることをしていると仮定すると、それは間違って宣言されていると思います。私はそれを宣言することをお勧めします(可能であれば)
void swapEndian(void *pElement, size_t uNumBytes);
オブジェクトへのすべてのポインターで動作する場合swapEndian
は、ポインターを渡すことができます。これは、厳密なエイリアシング規則に従って、文字型へのポインターは、指定されたオブジェクトの型に関係なく逆参照できるためです。タイプキャストが必要なだけです。
swapEndian((char *)&numLine, sizeof numLine);
C11 (n1570)、§ 6.5 式
オブジェクトは、次の型のいずれかを持つ左辺値式によってのみアクセスされる格納された値を持つものとします。
— オブジェクトの有効な型と互換性のある型、
— オブジェクトの有効な型と互換性のある型の修飾されたバージョン
- オブジェクトの有効な型に対応する符号付きまたは符号なしの型である型、
- オブジェクトの有効な型の修飾されたバージョンに対応する符号付きまたは符号なしの型である型、
— そのメンバーの中に前述のタイプの 1 つを含む集約型または共用体型 (再帰的に、サブ集約または含まれる共用体のメンバーを含む)、または
— 文字タイプ。