由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - {C语言}请教如何通过变量访问结构体内的各个属性
相关主题
typedef 的一个问题sizeof()的问题
C++ STL map find does not work ???请教函数 INIT 怎么能free memory
c++ template question:difference between FILE and struct FILE
又问几个c语言编程的题目请问可以这样定义struct吗?
包子问使用C templates Sort data的问题[合集] Interview Question
问个 enum{}的问题 谢谢 (转载)ask a question about struct in C programming
how to initialize this struct.stl quiz 一问
为啥有人喜欢把_s结尾的结构typedef成_t结尾的,有讲究么?typedef
相关话题的讨论汇总
话题: struct话题: shuxing话题: config话题: strcmp话题: int
进入Programming版参与讨论
1 (共1页)
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 的大作中提到】
: 想了一圈,还是觉得你的答案最好.
1 (共1页)
进入Programming版参与讨论
相关主题
typedef包子问使用C templates Sort data的问题
typedef struct的问题问个 enum{}的问题 谢谢 (转载)
一个简单的C编程问题how to initialize this struct.
有段c++代码看不懂为啥有人喜欢把_s结尾的结构typedef成_t结尾的,有讲究么?
typedef 的一个问题sizeof()的问题
C++ STL map find does not work ???请教函数 INIT 怎么能free memory
c++ template question:difference between FILE and struct FILE
又问几个c语言编程的题目请问可以这样定义struct吗?
相关话题的讨论汇总
话题: struct话题: shuxing话题: config话题: strcmp话题: int