我希望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);
}
}
}
为什么会这样?
答案 0 :(得分:3)
你需要这样写:
for (i = 0; i < 6; i++) {
for (j = 0; j < 3; j++) {
test[i*3+j].num = i+1;
}
}
答案 1 :(得分:2)
将代码更改为此,您应该将 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,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;
}
}
更新:您需要跟踪要附加数字的外部循环或索引,以便每次运行外部循环时都不会重写。我这样做是测试[i +(3 * i)]