C言語関係掲示板

過去ログ

No.28. 二次元配列を関数に渡すには


はじめまして。
初心者でかなり初歩的な質問なのですが・・・

2次元配列を別の関数へ引数として渡したいのですが
うまくいきません。
たとえば、
-------------------------
#include <stdio.h>

void ppp(char **temp){
printf("0--> %s\n",temp[0]);
printf("1--> %s\n",temp[1]);
}

main(){
char aaa[2][5] = {{"aaa"}, {"bbb"}};
ppp((char **)aaa);
}
-------------------------
これでうまくいくと思っていたのですが、
実行するとcoreダンプをはいて落ちます。
もうまる2日ぐらいこれで悩んでいます。

どうかよろしくお願いします。


2次元配列を関数に渡す場合、関数側は、2次元配列で受けてください。

2次元配列は、メモリ上ではあくまでも1次元に並んでいます。
2次元配列の先頭アドレスを渡しても、関数側では、何列の配列なのかわかりません。
ですから、列の指定をした2次元配列で受けてください。行の指定は、特にする必要
はありません。

#include <stdio.h>

void ppp(char temp[][5]){
printf("0--> %s\n",temp[0]);
printf("1--> %s\n",temp[1]);
}

main(){
char aaa[2][5] = {{"aaa"}, {"bbb"}};
ppp(aaa);
}

ポインタを使いたい場合には、二次元配列の先頭アドレスを渡すのではなく
各行の先頭ポインタを渡すようにしてみるといいと思います。

#include <stdio.h>

void ppp(char *temp){
printf("%s\n",temp);
}

main(){
char aaa[2][5] = {{"aaa"}, {"bbb"}};
int i;

for(i=0;i<2;i++)
ppp(aaa[i]);
}


ともじさん。
ご回答ありがとうございます。

わかりやすく親切に説明いただいて大変助かりました。
これでやっと先に進むことができます。

ありがとうございました。

戻る


「初心者のためのポイント学習C言語」 Last modified:2001.7.25
Copyright(c) 2000-2002 TOMOJI All Rights Reserved