结构成员的嵌套循环赋值
Nested loop assignment to struct member
我想要一个 TestStruct
的实例数组,其中有一个 int
类型的成员。我希望输出为
1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6
但它是0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
我有点难过,因为我真的不明白这是怎么回事:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int num;
} TestStruct;
int main(void) {
int i, j;
TestStruct *test = malloc(sizeof(TestStruct) * 18);
for (i = 1; i <= 3; i++) {
for (j = 0; j < 6; j++) {
test[i].num = i;
}
}
for (i = 0; i < 18; i++) {
printf("%d ", test[i].num);
}
return 0;
}
如果我只是在嵌套的 for 循环中调用 printf()
,它工作正常:
#include <stdio.h>
int main(void) {
int i, j;
for (i = 1; i <= 6; i++) {
for (j = 0; j < 3; j++) {
printf("%d ", i);
}
}
}
为什么会这样?
将您的代码更改为此,您应该索引 i 元素而不是 j
for (i = 1; i <= 3; i++) {
for (j = 0; j < 6; j++) {
test[j + (3*i)].num = i;
}
}
上面的代码会打印出来
111111222222333333
为了实现 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6 你的代码应该如下所示
for (i = 1; i <= 6; i++) {
for (j = 0; j < 3; j++) {
test[j + (3*i)].num = i;
}
}
更新:您需要跟踪要向其附加数字的外循环或索引,这样它就不会在每次外循环为 运行 时重写。我是这样做的 test[i + (3*i)]
你需要这样写:
for (i = 0; i < 6; i++) {
for (j = 0; j < 3; j++) {
test[i*3+j].num = i+1;
}
}
我想要一个 TestStruct
的实例数组,其中有一个 int
类型的成员。我希望输出为
1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6
但它是0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
我有点难过,因为我真的不明白这是怎么回事:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int num;
} TestStruct;
int main(void) {
int i, j;
TestStruct *test = malloc(sizeof(TestStruct) * 18);
for (i = 1; i <= 3; i++) {
for (j = 0; j < 6; j++) {
test[i].num = i;
}
}
for (i = 0; i < 18; i++) {
printf("%d ", test[i].num);
}
return 0;
}
如果我只是在嵌套的 for 循环中调用 printf()
,它工作正常:
#include <stdio.h>
int main(void) {
int i, j;
for (i = 1; i <= 6; i++) {
for (j = 0; j < 3; j++) {
printf("%d ", i);
}
}
}
为什么会这样?
将您的代码更改为此,您应该索引 i 元素而不是 j
for (i = 1; i <= 3; i++) {
for (j = 0; j < 6; j++) {
test[j + (3*i)].num = i;
}
}
上面的代码会打印出来 111111222222333333
为了实现 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6 你的代码应该如下所示
for (i = 1; i <= 6; i++) {
for (j = 0; j < 3; j++) {
test[j + (3*i)].num = i;
}
}
更新:您需要跟踪要向其附加数字的外循环或索引,这样它就不会在每次外循环为 运行 时重写。我是这样做的 test[i + (3*i)]
你需要这样写:
for (i = 0; i < 6; i++) {
for (j = 0; j < 3; j++) {
test[i*3+j].num = i+1;
}
}