C言語講座 - ポインタ

さて、ポインタと言えばC言語で一番の壁だと思います。 基本的なことは簡単なんですがどうにもややこしい感じがします。


int  i;
int *p;

i = 100;
p = &i; /* ポインタにアドレスを代入 */

printf("%d\n",*p); /* ポインタの中身を表示 */

i = 200;
printf("%d\n",*p);

ポインタというのは、数値の代わりに「アドレス」を代入できる変数です。 上の「int *p」がポインタです。ポインタを宣言するときは、名前の前に「*」を入れればOKです。 ポインタには型があり、その型の変数のアドレスを代入できます。

ポインタの利点は、サイズが固定だということです。 つまりchar型でもどんなに大きな構造体(後述)でも、ポインタなら 32bitパソコンで 4バイト固定です。 そのため、関数にポインタを渡せば、4バイトのコピーで済みます。 実際の変数を渡した場合、それが大きな構造体なら全てコピーするのにも時間が掛かってしまいます。

又、関数にポインタを渡せば、そのポインタに代入してある変数のデータを直接書き換えることも出来ます。 そのため scanf 関数はアドレスを渡していたわけです。 ポインタが収納している変数を指すときは、「*」を頭につけます。 これによりポインタから、そのなかの変数を見たり、書き換えたりすることが可能になります。


int i;
int array[5] = { 10,100,1000,10000,100000 };
int *parray = array; /* 配列はそのまま */

for( i=0; i<5; i++,parray++)
	printf("%d : %d",i,*parray);

ポインタは、インクリメントしたり、足したり引いたりする事も可能です。 上の例では、配列をポインタにいれて、ポインタをインクリメントすることで次の項目へと移っていっています。

配列は、[]を使わないと 0番目の項目を指すポインタになるので、& を使わずに直接アドレスを代入する事が出来ます。 そして、ポインタを増加(減少)ぶんだけ配列を移動します。 このように、簡潔に処理を行えるようになることもポインタの利点です。

Download 今回のソースDownload


★TOP★

Copyright(C) へぽぽ