p*****c 发帖数: 2858 | 1 小弟最近在做c开发,很多基本概念头痛不已,放狗搜过,没找到答案,身边也没有可
以问的人,希望各位前辈可以不吝请教。
比如说,我有个结构体
typedef struct{
int a;
int b;
int c;
}config_struct;
有个变量指针char *shuxing;
应该怎么写,才可以通过这个指针访问到config_struct里的属性?
比如说
shuxing = "a"的时候,可以访问到 config_struct->a ,
shuxing = "b"的时候,可以访问到 config_struct->b ,
我知道如果是php和java,这很容易做到,但是c语言真心不知道怎么弄。
谢谢 |
d****i 发帖数: 4809 | 2 Easy, use strcmp:
if(strcmp("a", shuxing) == 0) {
your_struct_ptr->a;
} else if(strcmp("b", shuxing) ==0) {
your_struct_ptr->b;
} else if(strcmp("c", shuxing) == 0) {
your_struct_ptr->c;
}
【在 p*****c 的大作中提到】 : 小弟最近在做c开发,很多基本概念头痛不已,放狗搜过,没找到答案,身边也没有可 : 以问的人,希望各位前辈可以不吝请教。 : 比如说,我有个结构体 : typedef struct{ : int a; : int b; : int c; : }config_struct; : 有个变量指针char *shuxing; : 应该怎么写,才可以通过这个指针访问到config_struct里的属性?
|
h**********c 发帖数: 4120 | 3 your struture can use GHashTable |
s*******i 发帖数: 698 | 4 用Union 建一个int数组和struct共享内存
再用*shuxing减去'a'作为index即可 |
w***g 发帖数: 5958 | 5 想了一圈,还是觉得你的答案最好.
【在 d****i 的大作中提到】 : Easy, use strcmp: : if(strcmp("a", shuxing) == 0) { : your_struct_ptr->a; : } else if(strcmp("b", shuxing) ==0) { : your_struct_ptr->b; : } else if(strcmp("c", shuxing) == 0) { : your_struct_ptr->c; : }
|
h**********c 发帖数: 4120 | 6 我老认为玩玩宏是可能的,周末找时间试试
【在 p*****c 的大作中提到】 : 小弟最近在做c开发,很多基本概念头痛不已,放狗搜过,没找到答案,身边也没有可 : 以问的人,希望各位前辈可以不吝请教。 : 比如说,我有个结构体 : typedef struct{ : int a; : int b; : int c; : }config_struct; : 有个变量指针char *shuxing; : 应该怎么写,才可以通过这个指针访问到config_struct里的属性?
|
h**********c 发帖数: 4120 | 7 Thanks,
heteroclinic,您好:
powerrc 转给您,现金(伪币): 20 . |
c******3 发帖数: 6509 | 8 *(((int *)&config_struct->a) + (shuxing - 'a'))
有点猥琐,做考试还行,实际代码最好别用 |
h**********c 发帖数: 4120 | 9 其实dot是可以overload的,或者在struct重新定义一个
.() (string s) operator,然后把下段加进去
如果是自己从头干,觉得这种config用个static map 或table 比较好,难搞的是一大
堆老库,第三方库。c 的 struct就是 cpp的 class,区别是没有private, public 等。
那么办法就是 继承这些structure,适当加一些新的内容。
这里再加点我个人的私货,一般一些项目开始都吹自己搞了什么新东西,要把以前的东
西统统推翻,这些项目出不了两年成了旧项目的时候,别人想接手几乎是天方夜谭。 r
u sober?
相反一个项目开始就注意工具材料,工程设计的起承转合,看起来麻烦琐屑“简单”,
后面的人接手起来更容易。 add value to the society.
【在 d****i 的大作中提到】 : Easy, use strcmp: : if(strcmp("a", shuxing) == 0) { : your_struct_ptr->a; : } else if(strcmp("b", shuxing) ==0) { : your_struct_ptr->b; : } else if(strcmp("c", shuxing) == 0) { : your_struct_ptr->c; : }
|
d***a 发帖数: 13752 | 10
如果要反复访问这样的数据结构,这样做的效率会比较差。
比较常用的作法,是用一个带union的结构,并且预先把字符串转换成enum类型。
typedef struct {
enum {
A, B, C
} type;
union {
int a;
int b;
int c;
} data;
} config_struct;
【在 w***g 的大作中提到】 : 想了一圈,还是觉得你的答案最好.
|