如何把变量转成常量?

wtogether 2005-12-13 12:02:47
申明了一系列数组常量,这样的格式:
char *c0[] = {"a","b","c"};
char *c1[] = {"d","e","f"};
char *c2[] = {"g","h","i"};
................
因为c*的列数比较多,所以,不能一个个的去判段调用哪个数组
现在想用两个变量char buf[10]和int i,引用一个常量
i = 3;
sprintf(buf, "c%d", i);
这个宏应该怎么设置?
...全文
1389 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
waterczh 2005-12-14
  • 打赏
  • 举报
回复
有创意
zcz0918 2005-12-14
  • 打赏
  • 举报
回复
#define F(a,n) \
sprintf((char*)(a),(char*)c##n);这样可以用F(buf,1),不过C中串化不能操作字符串的,所以lz的要求还是实现不了
zcz0918 2005-12-14
  • 打赏
  • 举报
回复
#define P(a,n)
wtogether 2005-12-14
  • 打赏
  • 举报
回复
to lyh_bgsky()
这个方法只对常量有效
int g2[3] = {2,3,4};
#define GETME(i,y) \
g##i[1] = y;

... ..... ............
i = 1;
GETME(i,100);
就编译不过了

感谢大家帮助,只有另外想办法了
wtogether 2005-12-13
  • 打赏
  • 举报
回复
那有没有动态赋值的方法,例如申明:
char **c[30] = {};
然后
c[0] = {"a", "b", "c"};
c[1] = {"e", "d", "f"};
.........
不过这种申明编译不过去啊
megaboy 2005-12-13
  • 打赏
  • 举报
回复
你想要的是“标识符化”,但C里没有这样的东西,不行的。老老实实用数组去做吧。

可以用数组这样变通,定义一个二级指针数组,例如:

char **a[N]; //N在0---c*的*之间

然后a[0]=c0,a[1]=c1.......a[N]=cN

a[i]就是对应的数组。
lyh_bgsky 2005-12-13
  • 打赏
  • 举报
回复
谁说不可以,至少在vc 6里可以实现
例:
int g1[3] = {1,2,3};
int g2[3] = {2,3,4};
#define GETME(i,y) \
g##i[1] = y;

... ..... ............
GETME(1,100);
int j = g1[1];
你看值是不是改变了 ^_^

lyh_bgsky 2005-12-13
  • 打赏
  • 举报
回复
说不可以,至少在vc 6里可以实现

int g1[3] = {1,2,3};
int g2[3] = {2,3,4};
#define GETME(i,y) \
g##i[1] = y;

... ..... ............
GETME(1,100);
int j = g1[1];
你看值是不是改变了 ^_^
jixingzhong 2005-12-13
  • 打赏
  • 举报
回复
有创意, 但是目前没有可行性 ~

或许以后可以把 标准拓展一下吧 ~ ^_^
arden1019 2005-12-13
  • 打赏
  • 举报
回复
c的宏是不会进入字符串""中解释的。
所以你的i = 3;
sprintf(buf, "c%d", i);
不太好使用宏实现。
Helloooooo 2005-12-13
  • 打赏
  • 举报
回复
可以申明一个指针数组(char*)c[30],
对每一个指针使用时开辟内存然后赋值。

------------------------------------
回复人: wtogether(wtogether) ( ) 信誉:100 2005-12-13 12:50:00 得分: 0


那有没有动态赋值的方法,例如申明:
char **c[30] = {};
然后
c[0] = {"a", "b", "c"};
c[1] = {"e", "d", "f"};
.........
不过这种申明编译不过去啊


csucdl 2005-12-13
  • 打赏
  • 举报
回复
使用这个{}来赋值似乎不妥, {}成为初始化值, 想想他应该用来干什么
goodluckyxl 2005-12-13
  • 打赏
  • 举报
回复
^_^ lz想法有创意
不过是不行的 c只能认出是c**字符串
定义管理类型的数组或者使用链表等数据结构来管理
wtogether 2005-12-13
  • 打赏
  • 举报
回复
兄弟是C语言的,没有类
piaochen_2002 2005-12-13
  • 打赏
  • 举报
回复
老大为什么不用vector<string>呢?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧