プロが教えるわが家の防犯対策術!

配列を使わずに、変数名を動的にループで回したい

大学の課題をやっている途中に思ったことなのですが……。
プログラム中に同じ型の変数p1,p2,p3があり、それぞれの変数にループで同じ処理を施したいと思っています。
しかし、「p(i)」や「("p" + i)」などと、変数どうしを別のものとして認識させようとしても、コンパイラから警告が出て上手くいきません。

配列を使えば、このような処理が出来ることはわかるのですが、使う変数名を指定されてしまっているために、今回は配列を使えません。
出来るか出来ないか、出来る場合は方法を知りたいです。

後、今回はC言語のプログラムで利用出来るかが自分にとっての問題なのですが、C言語以外のこのプログラミング言語なら出来る、とかの情報もこの機会に知りたいです。
お答え出来る範囲でいいので、もしよければ回答お願いします。

A 回答 (4件)

ポインタの配列を用意しておくとか。



int main(void)
{
 int p0 = 1, p1 = 3, p2= 5;
 int *ptr_array[] = { &p0, &p1, &p2 };
 int i;
 
 for(i=0; i<3; i++){
  printf("p%d = %d \n", i, **(ptr_array + i));
 }

 return 0;
}

ちょっと強引ですが、これで動きますよ。
    • good
    • 0
この回答へのお礼

変数を使って、変数名を動的に変更するには、やっぱりポインタ配列か関数で実装するのが良さそうですね。
回答ありがとうございました。

お礼日時:2010/06/26 22:28

同じ処理なら関数にするのが一般的です。

    • good
    • 1
この回答へのお礼

そうかもですね。これからは関数利用の方法も考えてプログラミングしたいと思います。

お礼日時:2010/06/26 22:26

変数名を動的に変更するのは難しいでしょう


ポインタ配列を使って 実際に操作される変数と コード上で使用している変数を偽装することは可能ですよ

たとえば
int p1, p2, p3 , i;
int* pp[] = { &1p, &p2, &p3 };
としておけば
*pp[0] で p1を操作可能ですよ

for( i = 0; i < 3; i** ) {
  *pp[i] = i * 3;
}
などと操作すれば
p1,p2,p3に 0,3,6が代入されます
    • good
    • 1
この回答へのお礼

なるほど。ポインタ配列を使う方法がありましたか。全然思いつかなかったです。ああ確かに。
参考にします。

お礼日時:2010/06/26 22:24

Cでは無理でしょう


一般にコンパイル言語では無理だと思います
インタープリタのPHPなら可能です
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

……そうですか。それでは諦めるしかないですね。
でもPHPだと出来るんですね。将来使うときのために参考にします。

お礼日時:2010/06/26 12:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A