簡體   English   中英

在循環中訪問結構變量

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM