C言語 | ポインタ | ポインタの型変換
ポインタは別のポインタ型へキャストできます。メモリ表現が重要な低レベル処理で役立ちます。
ポインタの型変換を使う
ポインタ型は、一度に何バイトを操作するかをコンパイラに伝えます。たとえば32ビットの int 値を2つ持つ配列は8バイトであり、unsigned char * を使うと1バイトずつ確認できます。
#include <stdio.h>
int main() {
int iCount, iArray[2] = { 0x02040810, 0x20408000 };
unsigned char *cp = (unsigned char *)iArray;
for (iCount = 0; iCount < 8; iCount++)
printf("cp + %d = %d\n", iCount, *(cp + iCount));
return 0;
}
バイト順は環境によって異なります。Intel互換CPUでは一般にリトルエンディアンが使われ、下位バイトから格納されます。ビッグエンディアンでは上位バイトから格納されます。
ポインタ型どうしのキャストは可能ですが、正しく使う責任はプログラマにあります。ポインタと整数の相互変換は処理系依存なので、移植性が必要なコードでは避けてください。
有効なオブジェクトを参照しないポインタには NULL を代入できます。
char *str = NULL;
有効性が不明なポインタは、間接参照する前に NULL と比較してください。NULLポインタの間接参照は未定義動作です。