|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
数组章节“动动手”课后题中,题目是“用户输入年份,打印该年每个月的天数”。我对答案中的其中一行代码看不懂。
答案代码是:
#include <stdio.h>
int main()
{
int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int i, year;
printf("请输入一个年份:");
scanf("%d", &year);
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
{
days[1] = 29;
}
for (i = 0; i < sizeof(days) / sizeof(days[0]); i++)
{
printf("%2d月份:%d天\n", i+1, days[i]);
}
return 0;
}
我对其中的 for (i = 0; i < sizeof(days) / sizeof(days[0]); i++)看不太懂,大神们可以给小白解释一下这行代码的意义吗?特别是 i < sizeof(days) / sizeof(days[0])代表什么呢?在这给大神鞠躬了
在这行代码中,sizeof(days) 表示数组 days 的字节数,sizeof(days[0]) 表示数组中每个元素的字节数。通过将总字节数除以每个元素的字节数,我们可以得到数组的长度(也就是数组元素的个数)。
仍旧是 i < sizeof(days) / sizeof(days[0]) 表达式的含义是,只要变量 i 的值小于数组 days 的长度,循环就会继续进行。这样做是为了确保循环能够遍历整个数组,并打印出每个月的天数。
以这个具体的例子来说,数组 days 中有12个元素,而每个元素占用的字节数为4(int类型的字节数通常为4)。所以 sizeof(days) 将返回 12 * 4 = 48 字节,sizeof(days[0]) 将返回 4 字节。因此,sizeof(days) / sizeof(days[0]) 将等于 48 / 4 = 12,表示数组 days 的长度为12。
这段循环代码将 i 的值从 0 逐渐增加到数组长度减1的范围内,即 0 到 11。这正好对应了数组 days 中的每个元素,所以可以使用 i 来访问并打印出每个月的天数。
|
|