2017-02-27 14 views
0

私はループ内のポインタを使ってメモリを割り当てたいと思っています。私は、この特定の問題に類似した質問に答えを見つけましたが、そうではありません。 は例forループ内の各繰り返しをベクトル名として変更した文字列を使用

char name_bin[50]; 
for (int i=0; i<NB; i++) {                          
    sprintf(name_bin, "bin_vector%d", i);                      
    double *name_bin = (double *) malloc(sizeof(double) * NGMAX);                
} 

のために私はこれを行うための方法を見つけるように見えることはできません。私はサイズがNGMAXのNBアレイをすべて別の名前、bin_vector0などで欲しい 私はそれが可能であったと言われていたので、どんな助けも大歓迎です。

+1

それぞれサイズ「NGMAX」の2次元配列は、1次元配列に対して異なる「0」および「1」および「2」などの整数名を持ちます。しかし、あなたのサンプルコードには欠陥があります。同じスコープ内で同じ変数名を2回使用しています。 –

+0

助けていただきありがとうございます。私は2次元アレイの使用を避けようとしていましたが、それを行う唯一の方法だと思います。 – AJB

+0

実行時に変数名を作成しようとしていますか?私が知っていることをする方法はありません。 – yano

答えて

0

実行時に派生した名前で新しい変数を作成することはできません。 Cでは、これを達成する方法は、文字列をオブジェクトに関連付けるテーブルを使用することです。テーブルがどのように実装されるかは、要件や複雑さに応じて異なります。少数の名前の場合、リンクされたリストで十分です。名前の数が非常に多い場合は、ツリーまたはハッシュテーブルが必要な可能性があります。

ただし、特定の問題は単純な配列で解決できます。

double *bin_vector[NB]; 

その後、あなたはbin_vector[5]で6 番目のビンを参照することができます。

+0

フィードバックをいただきありがとうございます。私は何をしようとしていたのか分からないので、代わりにポインタの配列を使い、コードは次のようになります。 double * name_bin [NB];for(int i = 0; i AJB

+0

最初のname_binの前に*、2番目のdoubleの後に1がなければなりません。書式設定によって削除されました。 – AJB

関連する問題