概ね方位不定だが多分割と偏っている
スポンサーサイト
--年--月--日 (--) | 編集 |
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


C ポインタ配列を渡す
2006年08月25日 (金) | 編集 |
そして二次元配列を渡せるならポインタ配列も…ってわけだ。
お約束だな。この連鎖はどこまで続くのっ
ポインタ配列も配列には違いないので、関数に渡すときは先頭アドレスだけ渡す。

char *name[6];

例えば、上のようなポインタ配列を関数funcに渡すときは、

func(name);
   ↓ 先頭アドレスを渡す
func(char *a[ ])
{
 なんか式
}


といったように記述する。って一次元配列と何も変わらねーし。
しかも形式の話はこれで以上だし。
ただ、記述はアレだがやってることは多少ややこしく、char *a[ ]はchar * *aとしても同じな為(一次元配列を渡す、を参照)、aはポインタへのポインタと考えることも出来るのである。メモリ上のアドレスを参照する変数の置いてあるアドレスを参照するのである。
全くややこしい。

ややこしいので今はこれ以上考えないことにして形式終わり。
後は実際にやってみるとしよう。
上のchar *name[6]というポインタ配列のデータを表示する関数を作ってみる。

void disp(char *a[ ])
{
 int i;
 i=0;
 while (a[i]!=NULL){
  printf("%s\n",a[i])
  i++;
 }
}


配列を表示するということでお馴染みのループを使い、
そのループを使う為にループ変数を宣言して初期化する。
後はNULLに到達するまで配列a[i]の内容を表示し続ける。
今回はデータの終わりをNULLってのにしたが、これはstdio.hの中で0に定義されている、どこも指していないポンタ変数らしい。正式名称はnull pointerだとか。最近(といっても結構以前からだが)流行っているぬるぽというのはこれの吐くエラーから来ているそうな。

null pointer exception
ぬる ぽいんた えくせぷしょん。通称ぬるぽ。
日本語で言うと無参照例外と言うエラーらしい。

話が逸れた。

とにかく、これで表示は出来るので後はメインルーチンでこれを呼び出すのみ。

void main(void)
{
 static char *name[]={"隊長","アリシア","桐崎","栃木","ティー","ウェル",NULL};

 disp(name);
}


pointer_array_test.jpgpointer_array_test2.jpg
こんな感じ

まとめよう。

ポインタ配列も一次元配列と同じように関数に渡せるよ!
ぬるぽっていうのはNull pointer exceptionの略なんだ!


以上。
ポインタへのポインタとか考えるとややこしいが、要するに文字列の配列を受け渡す方法と思っておけばOKだ。多分。
スポンサーサイト

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。