[英]Access structure variables in a loop
我的要求是我创建一个带有变量的结构,例如
struct stu{
char var_01;
char var_02;
.
.
char var_30;
}stu_t;
而不是使用数组代替
char var[30];
建立了上述要求后,我无法弄清楚如何通过连接 var_ + 迭代整数在循环中访问这些变量。 我知道我不能只是连接,存储在一个变量中并使用该变量来访问。
感谢任何帮助。 谢谢!
在 C 程序中,变量名在运行时没有意义。 这些名称仅适用于人类,它们在编译期间会被删除。 这就是为什么你不能构建变量名称并以某种方式使用它们。
解决方案是使用带有指针的外部数组:
stu_t my_stu;
char * vars[30];
vars[0] = &my_stu.var_01;
vars[1] = &my_stu.var_02;
/* ... and so on ... */
然后您可以使用vars
访问my_stu
:
*vars[0] = 'u';
printf("var_01 is '%c'\n", my_stu.var_01);
当然,这不是很漂亮,但这就是你得到的。
您可以为此使用指针:
struct stu{
char var_01;
char var_02;
/* ... */
char var_30;
}stu_t;
char* ptr = &stu_t.var_01;
while(ptr <= &stu_t.var_30)
{
*ptr = '0';
printf("Character #%ld = %c \n", ptr - &stu_t.var_01, *ptr);
ptr++;
}
你可以使用 union 但它是相当“丑陋”的 hack,我不推荐它,但如果你真的想要它......(仍然需要在某处使用数组!Union 将使结构和数组使用内存中的相同位置。 ) 例子:
#include <stdio.h>
union Test
{
struct
{
char var_00;
char var_01;
char var_02;
char var_03;
char var_04;
};
char var[5];
};
int main()
{
union Test t;
t.var_01 = 'a';
printf("%c\n", t.var[1]);
return 0;
}
它输出a
. 无论如何,最好简单地使用数组。 你的要求有点奇怪...
如果您的结构只包含字符,您可以这样做:
typedef struct stu_s {
char a;
char b;
char c;
} stu_t;
int main()
{
stu_t my_struct;
char *ptr = (char *)(&my_struct);
ptr[0] = 1;
ptr[1] = 2;
ptr[2] = 3;
printf("%hhd %hhd %hhd\n", my_struct.a, my_struct.b, my_struct.c);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.