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ポインタの間接参照は未定義動作です。