【发布时间】:2015-12-16 01:23:06
【问题描述】:
所以,我想知道结构内部数组的初始化。如果我把它放在主要功能之上:
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;
}
}
.. 似乎不起作用,通过像这样在 main 中调用它:
WEEK week;
initTest(week, 7);
我从填充到我的数组的内存中提取了一些垃圾值。
但是,如果我直接在主函数中使用以下内容
int i;
for(i=0; i<7; i++){
week.day[i] = i + 1;
}
..我得到了很好的Array (1.. to ..7) 归档。
有人能解释一下为什么会发生这种情况,并可能给出一些示例或替代方法来解决这个问题(使用指针/malloc 或其他方式)等吗?
【问题讨论】:
-
您希望
void f(int i) {i = 5;} int main() {int x = 7; f(x); printf("%d\n", x); return 0;}打印什么? -
void 什么都不做(没有返回值),所以 main 打印出 7!顺便提一句。我尝试了第一次尝试在结构中填充数组的方式来归档结构成员,并且它以某种方式工作:
typedef struct{ int day; } WEEK; void initTest(WEEK week) { int i; for(i=0; i<7; i++){ week[i].day = i + 1; } }..所以基本上定义了一个包含 7 个主要结构的数组,例如:WEEK week1[7]; initTest(week1)工作方式有所不同,因为它填充值好吗? -
int f(int i) {i = 5; return i;} int main() {int x = 7; f(x); printf("%d\n", x); return 0;}呢? -
函数 f 的返回值为 5,但它对 Action 没有任何作用。所以 7 将打印在控制台中。如果我们使用
printf("%d\n", f(x));,控制台输出将为 5。 -
正如您在每本优秀的 C 书籍或教程中看到的那样,C 是按值调用的。
标签: c arrays struct initialization int