守くんのC言語講座 第9回 − ポインタ編 −
「ポインタと1次元配列」
「ポインタと文字列」

@配列要素の取り出し方
前回やったように配列要素の前に&をつければ、アドレスを取り出すことができ る。ポインタにアドレスを渡すのは、配列名は先頭アドレスを持っているので、 pn=a(pnは、ポインタ変数)とすればいいが、pn=&a[0]とも書ける。しかし、配列 を読むためには、[1]、[2]・・・と読んでいかなければいけない。次の要素に移動 するには、pn++というような演算をする。

Aポインタ変数を文字列で初期化
これは、char str1[]="Mamoru"; と char *str2="Mamoru"; の2つの方法がある
配列str1 ポインタstr2
+----------+ +----------+
| M | 1000 | 2000 | -----------------+
+----------+ +----------+ |
| a | |
+----------+ +----------+ |
| m | 2000 | M | *(str2+0) ←+
+----------+ +----------+
| ・ | 2001 | a | *(str2+1)
・ +----------+
・ 2002 | m | *(str2+3)
\0 +----------+

Bポインタ配列
char *name[]= {
"Inaba",
"Samei",
"Ichihara"
};

のように初期化する。それぞれの文字列が先頭アドレスを持っている。

int i;
char *name[]= {
"Inaba",
"Samei",
"Ichihara"
}
for(i=0;i<3;i++){
printf("%s\n",name[i]);
}

の実行結果を考えてみよう。

Cコマンドライン引数
main関数で受け取る引数(コマンドライン引数)についての説明をする。

a:\>dir /w /p

上の例では、DOSのコマンドDIRに引数2つを与えている。このコマンドで は、/wがあれば ワイド表示、/p があれば、画面ごとにポ−ズするなどとい う引数に対する処理ができる。Cでもこのようなことが可能である。なおかつ、 必ず知っておかなければならない部分でもある。

main(int argc,char *argv[])
{ ^^^^^^^^^^^^^^^^^^^^^^
・・・・・・・・・・
return(0);
}

^^^^^^線部がそれである。int argc がそのプログラムを含む引数の数で。char *argv[]がプログラム名を含めた引数の文字列へのポインタ配列である。

#include <stdio.h>
main(int argc,char *argv[])
{
int i;
for(i=0;I<argc;i++){
printf("%d : %s\n",i,argv[i]);
}
}

※次回は、構造体。