我错过了什么?我是C的初学者,但我得到的结果对我来说意外。我简化了案例以获得错误。
double years = (double) date.get(Calendar.YEAR) - (double) startDate.get(Calendar.YEAR);
打印的结果是一百九十九。我期望的是:1,2,3 ......
答案 0 :(得分:5)
循环中的这个声明
struct str str1;
生成类型为struct str
的变量,该变量仅在创建它的循环的迭代期间有效。迭代结束后,str1
将变为无效。如果您决定通过该迭代范围之外的指针访问它,则会得到未定义的行为。
您可以使用malloc
制作“持久”struct
以供稍后在该计划中使用:
strArray[i]= malloc(sizeof(struct str));
strArray[i]->a = i;
由于struct
是动态分配的,因此您需要在使用strArray
元素后将其释放:
for(int i = 0; i < 100; i++) {
free(strArray[i]);
}
答案 1 :(得分:0)
整个strArray指向最后包含99的str1,所以整个数组位置指向99,str1在第一次循环迭代的最后包含。