【问题标题】:Access structure variables in a loop在循环中访问结构变量
【发布时间】:2015-09-10 09:49:24
【问题描述】:

我的要求是创建一个带有变量的结构,例如

struct stu{
    char var_01;
    char var_02;
    .
    .
    char var_30;
}stu_t;

而不是像

那样使用数组
char var[30];

建立了上述要求后,我不知道如何通过连接 var_ + 迭代整数来循环访问这些变量。我知道我不能只是连接、存储在一个变量中并使用该变量进行访问。

感谢任何帮助。谢谢!

【问题讨论】:

  • 唯一简单的答案是你不能。根据您的要求,您可以拥有一个指向成员变量的指针数组。
  • sniff 对我来说就像家庭作业,因为这似乎是对软件的不合理要求。
  • Matt Taylor : 碰巧有时很有用。
  • 用力闻@MattTaylor。它是我正在编写的数据层的要求

标签: c struct structure


【解决方案1】:

变量名在 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);

当然这不是很漂亮,但这就是你得到的。

【讨论】:

    【解决方案2】:

    您可以为此使用指针:

    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++;
    }
    

    【讨论】:

      【解决方案3】:

      你可以使用 union,但它相当“丑陋”,我不推荐它,但如果你真的想要它...(不过,它需要在某个地方使用数组!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。 无论如何,最好简单地使用数组。你的要求有点奇怪……

      【讨论】:

        【解决方案4】:

        如果你的结构只包含字符,你可以这样做:

        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);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多