吖呵来咯 发表于 2022-4-11 16:40:46

求问 sizeof 的用法

#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 = 29;
      }

      for (i = 0; i < sizeof(days) / sizeof(days); i++)
      {
                printf("%2d月份:%d天\n", i+1, days);
      }


      return 0;
}    这个for循环是什么意思呀?为什么用这个判断条件,这个判断条件是什么?求大神解答

wp231957 发表于 2022-4-11 16:51:30

sizeof(days) / sizeof(days就是12的意思
至于为啥这样写?,不知道,炫酷??

andy大宝 发表于 2022-4-11 16:53:00

关于sizeof():http://www.cppblog.com/pwqonline/archive/2009/03/01/75269.html

风车呼呼呼 发表于 2022-4-11 16:59:19

本帖最后由 风车呼呼呼 于 2022-4-11 17:04 编辑

循环是什么意思看打印内容就知道了呀,就是循环打印每个月份有多少天呗

sizeof是用来计算尺寸(占内存多少空间)的,比如sizeof(int)是4字节(有的系统里是8字节)

sizeof(days)就是计算这个数组占多少字节,数组里有12个int型元素,那就是12*4=48字节
同理一个数组元素占4字节,这里的days就只是代表其中一个元素而已,你换成days、days,只要不越界都行。

然后再来看看结果,i要小于它俩的商,那就是i<12呗
所以这条判断条件完全等价于i<12

所以就是看起来有点唬人,至于为什么要写成那种形式,我也说不准
唯一能想到的可能性,大概是在预防哪天咱们一年不是12个月份了吧。

毕竟这种写法,只需要修改数组内容就可以了
要是写成i<12这种,还得跑来改一下判断条件

大河之jian 发表于 2022-4-13 10:53:25

wp231957 发表于 2022-4-11 16:51
sizeof(days) / sizeof(days就是12的意思
至于为啥这样写?,不知道,炫酷??

这样求得了数组的个数,下面遍历用
页: [1]
查看完整版本: 求问 sizeof 的用法