C言語 ポインタの加減算






スポンサードリンク

ポインタの演算は、配列要素(※配列の長さ)を順にたどっていくために使用する方法です。
※配列要素(配列の長さ)
例:【 a[5]; 】と配列宣言すると、【 a[0] 】〜【 a[4] 】の変数が用意されます。この範囲を配列要素と言います。

※2、ポインタに対しては次の演算しだけが使用できることになっています。
【 + - ++ -- 】インクリメントやデクリメントの様な感じです。(こちらからサンプルを参照してみてください)

ポインタでの演算記述サンプルです。減算も可能ですが、事実上加算にて利用する事が殆どとの事です。サンプルは加算のみのサンプルとなります。

#include <stdio.h>
int main(void)
{
   int ad[4] = {100, 200, 300, 400};
   int *po;

   po=&ad[0];

   while (1) {
    printf("ポインタ値=%d\n",*po);
    if(*po == 400) break;
    ++po;
   }

return 0;
}


解説
ポインタをインクリメントし、【 po=&a[0] 】に代入されたアドレスを一づつ後ろにたどって出力する事が出来ます。
配列a[0]〜a[3]までのアドレスが以下の用に確保されているとしますと
ポインタ【 po 】に【 a[0] 】のアドレスを代入し【 ++po 】で加算していくと、メモリアドレスをたどって出力されていく事になります。
メモリアドレス0
【 po 】
メモリアドレス4
【 po+1 】
メモリアドレス8
【 po+2 】
メモリアドレス12
【 po+3 】
a[0] a[1] a[2] a[3]
※int型のメモリ領域は4バイト確保される為、上記例のメモリアドレスは4づつ繰り上げて表示しております。
※2、無限ループに付いては左下メニューのこれまでのまとめをご参照お願い致します。
ポインタの加減数
上記の実行結果です。


一応デクリメントも試して見ました。
ポインタに配列アドレス【 a[3] 】のアドレスを代入して【 --po 】デクリメントしてみました。
※ループに付いては、【 a[3] 】から順番に出力されるので【 a[0] 】の初期値100での【 break 】終了としております。

#include <stdio.h>
int main(void)
{
   int ad[4] = {100, 200, 300, 400};
   int *po;

   po=&ad[3];

   while (1) {
    printf("ポインタ値=%d\n",*po);
    if(*po == 100) break;
    --po;
   }

return 0;
}


上記の出力結果です。


ポインタの加減算の説明は以上です

あかかげまるのC言語入門はこちら!!

スポンサードリンク

パソコン勉強部屋 | パソコン勉強部屋2 | ADSL勉強部屋 | メール勉強部屋 | LAN勉強部屋 | ホームページ勉強部屋 | 自宅サーバー勉強部屋 | お役立ちソフトの部屋 | C言語勉強 | 無料ゲーム | 無料セキュリティー | Linuxのコーナー | あかかげまる | オンライン通販 | ショップブランドパソコン | DVDとCD編集ツール

 Subscribe in a reader


ページトップへ