如何在结构数组中设置常量值?

时间:2013-01-06 16:11:59

标签: c arrays structure

typedef struct all{
  int x;
  int ast[5];
}ALL;

ALL x[5];

int main(void){
  ALL y[5];
  // ...
}

我如何能够将常量值设置为ast[5],以便所有数组变量具有相同的ast[]值?

2 个答案:

答案 0 :(得分:1)

typedef struct all {
  int x;
  int ast[5];
} ALL;

ALL x[5];
ALL constast = {0, {1, 2, 3, 4, 5}};

int main(void) {
  ALL y[5] = {[0] = constast, [1] = constast, [2] = constast,
              [3] = constast, [4] = constast};
  // ...
}

答案 1 :(得分:0)

我从标签中假设问题是针对C而不是C ++。

你可以使用一个函数来获取struct数组的大小并返回一个指向数组开头的指针,如下所示:

typedef struct my_struct{
    int i;
    int var[5];
} my_struct;

my_struct* init_my_struct(int size){
    my_struct *ptr = malloc(size * sizeof(struct));
    for(my_struct *i = ptr; (i - ptr) < size; i++)
        i->var = // whatever value you want to assign to it
            // or copy a static value to the the array element
}

现在您可以通过这种方式在代码中使用它:

my_struct *my_struct_ptr = init_my_struct(5); // values inited as required

这种方法的缺点是你正在从声明一个数组转向在堆上使用内存 此外,你不能让别人创建一个特定大小的数组,并使用它按照你想要的方式分配给它。