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




TOP > C言語 > ポインタの使い方
ポインタをインクリメントすると?
ポインタをインクリメントすると、そのポインタのサイズ分移動する。例えば、char型のポインタをインクリメントすると(ポインタに1を足す)、1バイトアドレスが移動する。
ポインタは所詮アドレスを格納するデータ型なので、大雑把に言えば好きな箇所のデータを取得する事ができる。

ポインタのインクリメントの例
#include <stdio.h>

//int型のサイズ×4個分の構造体
struct _int_t
{
  int a;
  int b;
  int c;
  int d;
};

int main(int argc, char** argv)
{
  int i;
  int* p_int;
  char* moji = "abcdefghijklmnopqrstuvwxyz";
  char* p;

  struct _int_t s_data[2];
  struct _int_t *p_data;

  //初期化
  s_data[0].a = 1;
  s_data[0].b = 2;
  s_data[0].c = 3;
  s_data[0].d = 4;
  s_data[1].a = 5;
  s_data[1].b = 6;
  s_data[1].c = 7;
  s_data[1].d = 8;

  p_data = &s_data[0];

  
  //char型のポインタの先頭アドレスをインクリメントしてみる
  p = moji;
  printf("-------pのアドレスとデータは-------\n");
  while (*p != '\0') printf("Addr= %p, data=%c\n", p, *p++);
  printf ("\n");


  //構造体p_dataをインクリメントして、aの値を表示する
  printf("-------構造体のデータは-------\n");
  for (i = 0; i < 2; i++)
  {
    printf("data = %d\n", p_data->a);
    printf("data = %d\n", p_data->b);
    printf("data = %d\n", p_data->c);
    printf("data = %d\n", p_data->d);

    p_data++;
  }
  printf("\n");

  //構造体の先頭のアドレスをint型のポインタに代入してインクリメントする
  p_int = (int*)&s_data[0];
  printf("-------p_intのデータは-------\n");  
  for (i = 0; i < 8; i++)
  {
    //int型のバイト数分8回移動するので、構造体s_dataの全情報が取得できる
    printf ("data = %d\n", *p_int++);
  }
  
  
  
  
  return(0);

}

-------pのアドレスとデータは-------
Addr= 00421034, data=a
Addr= 00421035, data=b
Addr= 00421036, data=c
Addr= 00421037, data=d
Addr= 00421038, data=e
Addr= 00421039, data=f
Addr= 0042103A, data=g
Addr= 0042103B, data=h
Addr= 0042103C, data=i
Addr= 0042103D, data=j
Addr= 0042103E, data=k
Addr= 0042103F, data=l
Addr= 00421040, data=m
Addr= 00421041, data=n
Addr= 00421042, data=o
Addr= 00421043, data=p
Addr= 00421044, data=q
Addr= 00421045, data=r
Addr= 00421046, data=s
Addr= 00421047, data=t
Addr= 00421048, data=u
Addr= 00421049, data=v
Addr= 0042104A, data=w
Addr= 0042104B, data=x
Addr= 0042104C, data=y
Addr= 0042104D, data=z

-------構造体のデータは-------
data = 1
data = 2
data = 3
data = 4
data = 5
data = 6
data = 7
data = 8

-------p_intのデータは-------
data = 1
data = 2
data = 3
data = 4
data = 5
data = 6
data = 7
data = 8







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