ためになるホームページ お問い合わせ




TOP > C言語 > ポインタ
変数とアドレス演算子
変数が実体を持つと、メモリ上のどこかにロードされる。ある変数のアドレスを表示させるには、アドレス演算子「&」を使用する。アドレス演算子を用いて標準出力させるには、%pを用いて表示できる。

アドレス演算子
#include <stdio.h>

int main(int argc, char** argv)
{
  int a = 3;
  printf("変数aのアドレスは、%pである。\n", &a);
  return(0);
}


ポインタ
ポインタとは、アドレスを格納する変数である。C言語(C++含む)上で、各変数(関数、オブジェクトを含む)が実体を持つ時、アドレスに割り当てられる。そのアドレスを格納する変数をポインタという。
ポインタはポインタ宣言子を用いて宣言する。
int *p;

この時、変数pはアドレスを格納する変数となるので、上記の変数aのアドレスを格納するには、
p = &a;
となる。アドレスpに格納している値は、*pとなる。
ポインタはアドレスなので、ある変数にアドレスを格納後、その変数をキャストしてやればそのアドレスに格納されている変数を参照する事ができる。

ポインタとキャスト
#include <stdio.h>

int main(int argc, char** argv)
{
  //配列a
  int a[3] = {1, 2, 3};

  //アドレスを格納する変数
  unsigned int address;

  //アドレスを格納する
  address = (unsigned int)a;

  //配列aのアドレスと変数addressに格納したアドレスを表示する
  printf("p = %p\n", a);
  printf("address = %08X\n", address);

  //アドレスを格納するポインタ
  unsigned int *tmp;

  //アドレスをキャストして先頭のデータを表示する
  tmp = (unsigned int*)address;
  printf("tmp = %d\n", *tmp);

  //次のアドレス(int型)のデータの表示
  tmp = (unsigned int*)(address + sizeof(unsigned int));
  printf("tmp = %d\n", *tmp);
  
  return(0);
}







Copyright 2007 ためになるホームページ All Rights Reserved.