引数として2次元配列を関数に渡したい
Posted: 2007年7月15日(日) 18:41
C言語の初心者です.
2次元配列を引数に持つ関数を作成したいです.
具体的には以下のようなプログラムを作成しました.
ここでSearch_i(...)に要素数の異なる配列enginemap[/url][/url]とtcmap[/url][/url]の両方を引数として渡したいのです.
しかしエラーが出てしまい,引数として要素数の異なる2次元配列を渡せません.
少し調べたのですが,
int f(double[/url][5],...)
のように配列の第2要素の個数を指定する方法しかわかりませんでした.
これではenginemap[18][2]とtcmap[15][3]の第2要素の個数が(2個,3個と)異なっているので困ります.
どのように修正すべきでしょうか?
2次元配列を引数に持つ関数を作成したいです.
具体的には以下のようなプログラムを作成しました.
#include<stdio.h> void TCMap(); void EngineMap(); int Search_i(double map[/url][/url],int j,int i_mim,int i_max,double x); double enginemap[18][2]; double tcmap[15][3]; int main(void){ int i_now,i_now2; TCMap();//配列に値を代入 EngineMap();//配列に値を代入 i_now = Search_i(enginemap[/url][/url],0,0,17,1850);//i_now = 10のはず i_now2 = Search_i(tcmap[/url][/url],3,0,14,500);//i_now2 = 9のはず printf("%f,%f\n",i_now,i_now2); return 0; } int Seacrh_i(double map[/url][/url],int j,int i_min,int i_max,double x){ int i; if(map[i_min][j]<map[i_max][j]){//単調増加のとき for(i=0;i<i_max+1;i++){ if(x<map[i_min][j]){//最小値以下ならi=i_min; i = i_min; break; } else if(x>map[i_max][j]){//最大値以上ならi=i_max i = i_max; break; } else if(x<map[j]){// i = i; break; } } } else if(map[i_min][j]>map[i_max][j]){//単調減少の時 for(i=0;i<i_max+1;i++){ if(x>map[i_min][j]){//最大値以上ならi=i_min i = i_min; break; } else if(x<map[i_max][j]){//最小値以下ならi=i_max; i = i_max; break; } else if(x>map[j]){ i = i; break; } } } return(i); } void TCMap(){ int i,j; FILE *file; double a; printf("トルコン領域マップ\n"); file = fopen("TCOutputTorque.csv","r"); for(i=0;i<15;i++){ for(j=0;j<3;j++){ fscanf(file,"%lf,",&a); tcmap[j] = a; printf("tcmap[%d][%d] = %4.1f,",i,j,tcmap[j]); } printf("\n"); } fclose(file); } void EngineMap(){ int i,j; FILE *file; double a; printf("エンジン特性マップ\n"); file = fopen("TCInputTorque.csv","r"); for(i=0;i<18;i++){ for(j=0;j<2;j++){ fscanf(file,"%lf,",&a); enginemap[j] = a; printf("enginemap[%d][%d] = %4.1f,",i,j,enginemap[j]); } printf("\n"); } fclose(file); }
ここでSearch_i(...)に要素数の異なる配列enginemap[/url][/url]とtcmap[/url][/url]の両方を引数として渡したいのです.
しかしエラーが出てしまい,引数として要素数の異なる2次元配列を渡せません.
少し調べたのですが,
int f(double[/url][5],...)
のように配列の第2要素の個数を指定する方法しかわかりませんでした.
これではenginemap[18][2]とtcmap[15][3]の第2要素の個数が(2個,3個と)異なっているので困ります.
どのように修正すべきでしょうか?