題名の通り変数名を変数の値にしたいんです。
プログラムの途中で変数を宣言するとき、別の変数の値を変数名にして宣言する事は可能ですか?
例えば
int a = 10; とあったら、次に別の変数を宣言するときに変数名を"10"にしたいんです。
出来るかわかりませんが、出来るのなら方法を教えてください。
変数名を変数で
Re: 変数名を変数で
こんばんは~
さてさて、早速本題ですが
C言語の変数宣言をする時には、変数名の最初に数字は使えないという決まりがあります。
したがって"10"という名前の変数を宣言すること自体が出来ないということになります。
さてさて、早速本題ですが
C言語の変数宣言をする時には、変数名の最初に数字は使えないという決まりがあります。
したがって"10"という名前の変数を宣言すること自体が出来ないということになります。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ
- bitter_fox
- 記事: 607
- 登録日時: 13年前
- 住所: 大阪府
Re: 変数名を変数で
他の方が指摘している通り、変数名に変数を使うことはできませんが、何とかできるようにやってみました。
だいぶ無理やりです。。
nameがマイナスのときは考えていません(エラーコードと重複する)。
宣言のとき、Declaration、
値をセットしたいときは、SetValue、
値を取得したいときは、GetValue、
最後に、Freeを使ってください。
例)
なんか、Javaみたいになっちゃった(笑)
#include <stdlib.h>
int **list;
int max_list;
//
// 名前から番号を取得
///////////////////////////////////////////////////////////////////////////////////////
int FoundName(int name)
{
int counter;
for (counter = 0; counter < max_list; counter++)
{
if (list[counter][0] == name)
{
return counter;
}
}
return -1;
}
//
// 変数を宣言
///////////////////////////////////////////////////////////////////////////////////////
int Declaration(int name)
{
int counter;
if (FoundName(name) != -1)
{
return -1;
}
if (max_list == 0)
{
list = (int**)calloc(++max_list, sizeof(int*));
if (list == NULL)
{
max_list--;
return -2;
}
list[max_list-1] = (int*)calloc(2, sizeof(int));
}
else
{
list = (int**)realloc(list, ++max_list*sizeof(int*));
if (list == NULL)
{
max_list--;
return -3;
}
}
list[max_list-1] = (int*)calloc(2, sizeof(int));
if (list[max_list-1] == NULL)
{
max_list--;
return -4;
}
list[max_list-1][0] = name;
list[max_list-1][1] = 0;
return name;
}
//
// 変数名nameに値valueをセット
///////////////////////////////////////////////////////////////////////////////////////
int SetValue(int name, int value)
{
int number = FoundName(name);
if (number == -1)
{
return -1;
}
list[number][1] = value;
return name;
}
//
// 変数名nameの値を取得
///////////////////////////////////////////////////////////////////////////////////////
int GetValue(int name)
{
int number = FoundName(name);
if (number == -1)
{
return -1;
}
return list[number][1];
}
//
// 解放
///////////////////////////////////////////////////////////////////////////////////////
void Free()
{
int counter = 0;
for (counter = 0; counter < max_list; counter++)
{
free(list[counter]);
}
free(list);
max_list = 0;
}
nameがマイナスのときは考えていません(エラーコードと重複する)。
宣言のとき、Declaration、
値をセットしたいときは、SetValue、
値を取得したいときは、GetValue、
最後に、Freeを使ってください。
例)
int main()
{
int name1 = 10, name2 = 20, name3 = 30;
Declaration(name1);
SetValue(name1, 10);
Declaration(name2);
SetValue(name2, 20);
Declaration(name3);
SetValue(name3, GetValue(name1)+GetValue(name2));
printf("%d + %d = %d\n", GetValue(name1), GetValue(name2), GetValue(name3));
Free();
return 0;
}
最後に編集したユーザー bitter_fox on 2010年12月01日(水) 00:05 [ 編集 1 回目 ]
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 変数名を変数で
PHPなどのインタプリタ言語では値を変数に出来ますが、それでも数字から始まる名前は定数と区別がつかなくなるので出来ないです。
C++であればSTLのmapを使うなどで、変数に近い感覚で利用することは可能です。
C++であればSTLのmapを使うなどで、変数に近い感覚で利用することは可能です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 変数名を変数で
個人的に気になっただけなので、スルーしてくださってもいいのですが・・・
プログラムを起動した後に、変数を宣言しても、なんて宣言されるかわからないのでは、使えないと思うのですが・・・
使えるかは別として、変数名が1だったり25だったりしてもプログラム中ではわからない。
(なんて宣言されるかわかっているなら、宣言したほうが早いですし・・・)
・・・使うこと考えるとやっぱり配列で、その数字の個所を参照することになるのかな?
好きに宣言できたとしたら、どういう風に使えるのでしょうか?
(最初に書きましたが、気分を害されたならスルーしていただいていいです。)
プログラムを起動した後に、変数を宣言しても、なんて宣言されるかわからないのでは、使えないと思うのですが・・・
使えるかは別として、変数名が1だったり25だったりしてもプログラム中ではわからない。
(なんて宣言されるかわかっているなら、宣言したほうが早いですし・・・)
・・・使うこと考えるとやっぱり配列で、その数字の個所を参照することになるのかな?
好きに宣言できたとしたら、どういう風に使えるのでしょうか?
(最初に書きましたが、気分を害されたならスルーしていただいていいです。)
ニャン!!\(゜ロ\)(/ロ゜)/