Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果元素在结构中的位置已知,则访问结构元素,而不为每个元素定义案例_C_Pointers_Struct - Fatal编程技术网

C 如果元素在结构中的位置已知,则访问结构元素,而不为每个元素定义案例

C 如果元素在结构中的位置已知,则访问结构元素,而不为每个元素定义案例,c,pointers,struct,C,Pointers,Struct,如果我有一个包含3个元素的结构,并且第一个元素有一个读取请求。在这个场景中,有一种读取方法,它以一种通用的方式构造Xth元素,而不为每个数字定义案例 psuedo代码示例 #define RED 1 #define BLUE 2 #define GREEN 3 typedef struct color { int red; int char; int green; }; color a1; void ReadfromColor(int id , void * abc) { switch(id

如果我有一个包含3个元素的结构,并且第一个元素有一个读取请求。在这个场景中,有一种读取方法,它以一种通用的方式构造Xth元素,而不为每个数字定义案例

psuedo代码示例

#define RED 1
#define BLUE 2
#define GREEN 3

typedef struct color
{
int red;
int char;
int green;
};

color a1;
void ReadfromColor(int id , void * abc)
{
switch(id)
{
case RED:
{
 temp = a1.red;
}
break;

case BLUE:
{
 temp = a1.blue;
}
break;

case GREEN:
{
 temp = a1.green;
}
break;

abc=&temp;
}
}

对于每个元素,我都有一个案例。那么,如果函数ReadfromColor知道元素和顺序,那么是否有一种通用的方法来引用结构的特定属性


//这可能是一个愚蠢的问题,仍然希望找到解决办法…..

您可以将表示形式更改为:

typedef struct color {
  int c[3]; // int[0] is red, green, blue
} color_t;
访问功能内部:

temp = c[id];

在实际代码中,问题是结构是标准的,不能更改。您可以使用
offsetof()
来找出偏移量,并使用
id
作为结构的偏移量(但需要注意对齐和签名):例如
abc=a1+id*sizeof(int)
jev的意思当然是
abc=&a1.red+id-1