在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);
是否有可能以某种方式传入如上所示的字段名称?
答案 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
。