所以,我想知道结构中的数组的初始化。如果我把这个放在主要功能上面:
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或其他方式),等等?
答案 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
因为它没有意义。