在结构内填充int数组

时间:2015-12-16 01:23:07

标签: c arrays struct initialization int

所以,我想知道结构中的数组的初始化。如果我把这个放在主要功能上面:

typedef struct{
int day[7];
} WEEK;

void initTest(WEEK week, int seven) {
  int i;
  for(i=0; i<seven; i++){
        week.day[i] = i + 1;
  }
}

..似乎不起作用,通过像这样在主要调用它:

WEEK week;
initTest(week, 7);

我从填充到我的阵列的内存中获取了一些垃圾值。

但是,如果我直接在main函数中使用以下内容

int i;
for(i=0; i<7; i++){
        week.day[i] = i + 1;
}

..我得到了Array (1.. to ..7)的好文件。

  

有人可以解释为什么会发生这种情况,并且可能会提供一些示例或替代方法来解决这个问题(使用指针/ malloc或其他方式),等等?

2 个答案:

答案 0 :(得分:1)

initTest()收到了week的副本。调用函数week未更改。而是让调用代码和接收代码使用指向week的指针。

void initTest(WEEK *week, int seven){
  int i;
  for(i=0; i<seven; i++){
        week->day[i] = i + 1;  // ->
  }
}

WEEK week;
initTest(&week, 7);  // &week

答案 1 :(得分:1)

修改函数中的参数不会影响调用者传递的内容。

使用指针修改调用者的局部变量。

void initTest(WEEK *week){
    int i;
    for(i=0; i<7; i++){
        week->day[i] = i + 1;
    }
}

WEEK week;
initTest(&week);

我删除了论据seven因为它没有意义。