スポンサードリンク
HOME > C言語 > ポインタのアドレス計算

C言語 - ポインタのアドレス計算

ポインタ変数は、加算したり、減算したりして、アドレス値を変更する事ができます。

#include <stdio.h>

void main(void) {
   char cdata[5];
   char* cp;
   int idata[5];
   int* ip;

   cdata[0] = 's';
   cdata[1] = 't';
   cdata[2] = 'a';
   cdata[3] = 'r';
   cdata[4] = '\0';

   idata[0] = 5;
   idata[1] = 10;
   idata[2] = 15;
   idata[3] = 20;
   idata[4] = 25;

   cp = cdata;

   ip = idata;


}


の後、cp++ とした場合、*cp の値は、cdata[1] と同じ意味となり、t となります。
もう1度 cp++ としても同じで、*cp の値は、cdata[2] と同じ意味となり、a となります。

内部的には、cp++ とすると、char型なので、1(バイト)アドレス分プラスされます。



ip++ とした場合も同様で、*ip の値は、idata[1] と同じ意味となり、10 となります。
もう1度 ip++ としても同じで、*ip の値は、idata[2] と同じ意味となり、15 となります。

内部的には、ip++ とすると、int型なので、4(バイト)アドレス分プラスされます。



結果的に言うと、「ポインタ変数 + 1」を行うと、実際には、+1ではなく、
ポインタが指すデータ型のバイト分だけプラスされる。と言う事になります。

なので、int型配列のアドレス計算の時も1ずつ進まず、4ずつ進む。と言うワケです。

この辺りは、デバッグツールで、ポインタの値が増えていく様子を観察すると、
より一層理解しやすくなります。



スポンサードリンク







HOME

言語解説編
プログラミング用語・知識

C言語

C++言語

Java

C#

Visual Basic.NET

アプリケーション編
C言語による
コンソールプログラミング




Copyright (C) プログラミングランド All Rights Reserved