将特定的struct字段作为函数参数传递

时间:2016-11-11 10:00:24

标签: c

在javascript中,我们可以执行以下操作:

var obj = {alpha: [1, 2, 3], omega:[1, 2, 3]};

function test(field) {
   return obj[field];
}

test("alpha");

现在我试图在c中使用typedef结构在c中实现相同的目的:

typedef struct FooBar{
   char alpha[50];
   char beta[50];
} FooBar;

FooBar fooBar;

int getTest(type field) {
    return sizeof(fooBar.field);
}

getTest(alpha);

是否有可能以某种方式传入如上所示的字段名称?

3 个答案:

答案 0 :(得分:4)

你可以用宏来做:

#define getTest(t) sizeof(fooBar.t)

typedef struct FooBar {
  char alpha[50];
  char beta[50];
} FooBar;

FooBar fooBar;


int main()
{
  int alphasize = getTest(alpha);
}

但我不确定这是否符合您的要求。

答案 1 :(得分:1)

不,你无法实现这一点。当数组名称作为参数传递给函数时,它会衰减到指向数组第一个元素的指针,所以从被调用函数内部来看,通常不能直接获得原始数组的大小。

但是,如果你的数组有一个特殊的sentinel值,那么它可以工作,但这是一个条件场景。

答案 2 :(得分:1)

不,结构的成员不能作为变量引用。请注意,C是一种编译语言。在运行时,不再存在有关成员使用的标识符的信息。

您需要为每个成员使用单独的功能,例如

size_t getAlphaSize(void) {
    return sizeof(fooBar.alpha);
}

另请注意,sizeof会返回类型为size_t的无符号值,而不是int