将变量分组到 C 中的结构或容器中

Group Variables into a Struct or Container in C

我面临的问题是我想制作一个单个结构或容器,其中将使用 c 语言包含许多变量。 下面你可以看到我试着做了一个颜色类型和一个函数来定义一个更容易。

// Color Type For reuse
typedef struct Color
{
    GLfloat R;
    GLfloat G;
    GLfloat B;
    GLfloat A;
} Color;
// Color Setter to Make using the Color Type Easier
Color DefineColor (GLfloat R,GLfloat G,GLfloat B,GLfloat A)
{
    Color NewColor; // Combine GLfloat parameters into a Color Type
    NewColor.R = R;
    NewColor.G = G;
    NewColor.B = B;
    NewColor.A = A;

    return NewColor;
}

我想表达的意思是这样的

typedef struct ColorPalette
{
   Color Red = DefineColor(1,0,0,1);
   Color Green = DefineColor(0,1,0,1);
   Color Blue = DefineColor(0,0,1,1);
   Color Violet = DefineColor(1,0,0.5,1);
   // ... ect more colors and more colors
} ColorPalette;

这样就可以这样使用了。

ColorPalette.Red;

或者像这样

 Object.attribute.color = ColorPalette.Violet;
 Object.Color.ColorPalette.Red;

找到一种以这种方式对变量进行分组的方法在游戏编程、矩阵、数据排序等的其他部分可能非常有用。

您不能在定义结构时直接使用您的变量。像这样尝试:

typedef struct ColorPalette
{
  Color Red;
  Color Green;
  Color Blue;
  Color Violet;
  // ... ect more colors and more colors                                                                                                                                                      
} ColorPalette;

然后,您必须创建一个函数来存储结构 ColorPalette 上变量的所有值。例如:

ColorPalette    *fulfill_color(void)
{
  ColorPalette  *color;

  if ((color = malloc(sizeof(ColorPalette))) == NULL)
      return (NULL);
  color->Red = DefineColor(1,0,0,1);
  color->Green = DefineColor(0,1,0,1);
  color->Blue = DefineColor(0,0,1,1);
  color->Violet = DefineColor(1,0,0,1);
  return (color);
}

而且,这似乎很明显,但您可以调用函数 fulfill_color() 将所有颜色存储在类型为 ColorPalette 的变量中。例如:

int             main()
{
  ColorPalette  *color;

  color = fulfill_color();
}

函数调用后,可以输入..

color.Red.R (Value 1)

color.Red.G (Value 0)

etc..

.. 以达到您想要的值。

祝你好运!

我会这样去做 -

#include <stdio.h>

typedef struct
{
    GLfloat R;
    GLfloat G;
    GLfloat B;
    GLfloat A;
} Color;

typedef struct
{
    Color Red;
    Color Green;
    Color Blue;
    Color Violet;
} Palette;

Palette ColorPalette =
{
    /* red */
    {
        1, 0, 0, 1
    },
    /* green */
    {
        0, 1, 0, 1
    },
    /* blue */
    {
        0, 0, 1, 1
    },
    /* violet */
    {
        1, 0, 0.5, 1
    }
};

这将为您提供一个包含所有颜色的变量 ColorPalette