[英]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.