吻你不厌 发表于 2020-11-2 14:06:17

小白求助

#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;
}
i < sizeof(days) / sizeof(days) 这样的形式表达数组的长度,在实际开发中是很常见的技巧,这是什么意思啊?

风过无痕1989 发表于 2020-11-2 14:09:58

知道了数组的长度,就知道了数组的边界在哪里呀

吻你不厌 发表于 2020-11-2 14:16:01

风过无痕1989 发表于 2020-11-2 14:09
知道了数组的长度,就知道了数组的边界在哪里呀

i < sizeof(days) / sizeof(days)
这个能详细解释一下吗? sizeof 函数不熟

风过无痕1989 发表于 2020-11-2 14:33:30

吻你不厌 发表于 2020-11-2 14:16
i < sizeof(days) / sizeof(days)
这个能详细解释一下吗? sizeof 函数不熟

数组的 sizeof
数组的 sizeof 值等于数组所占用的内存字节数,如:

char a1[] = "abc";
int a2;
sizeof( a1 );   // 结果为4,字符末尾还存在一个NULL终止符
sizeof( a2 );   // 结果为3 * 4 = 12(依赖于 int)

把 sizeof 当作了求数组元素的个数,那是不对的,数组元素的个数应该怎么求呢?通常有下面两种写法:

int c1 = sizeof( a1 ) / sizeof( char );       // 总长度 / 单个元素的长度
int c2 = sizeof( a1 ) / sizeof( a1 );   // 总长度 / 第一个元素的长度

LuLD 发表于 2020-11-2 15:21:54

sizeof(days)是整个数组的大小
sizeof(days)是一个元素的大小
相除就是数组长度了,白话讲数组里面元素的个数

int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
sizeof(days)   12*4=48,int类型占四个字节 ,这里的12 是让你看的明白48是怎么算出来的,实际上编译器是不知道12 的,只知道 数组总长度是 48
sizeof(days)第一个元素占用的字节因为是int 所以是 4 个字节, 4

sizeof(days) / sizeof(days)数组总长度 / 数组第一个元素的长度   48 / 4得出,数组里的元素个为 12

心驰神往 发表于 2020-11-2 16:07:01

百度

吻你不厌 发表于 2020-11-2 19:23:57

风过无痕1989 发表于 2020-11-2 14:33
数组的 sizeof
数组的 sizeof 值等于数组所占用的内存字节数,如:



int c1 = sizeof( a1 ) / sizeof( char );
这里不应该是sizeof(int)吗?

风过无痕1989 发表于 2020-11-2 20:43:11

吻你不厌 发表于 2020-11-2 19:23
int c1 = sizeof( a1 ) / sizeof( char );
这里不应该是sizeof(int)吗?

你有认真看过我的回答吗?我举的例子,你看清楚了吗?

LuLD 发表于 2020-11-3 08:21:06

吻你不厌 发表于 2020-11-2 19:23
int c1 = sizeof( a1 ) / sizeof( char );
这里不应该是sizeof(int)吗?

用 数据类型的话,你不觉得太单一了么,适用性也差,用数组名的话,你只需要记住这一个公式,不需要特地的了解数组是什么类型的,以后如果你给别人写接口的话,适用性也比较好

xjywdltzh 发表于 2020-11-3 22:57:36

实习实习 知道了

莫凌栋 发表于 2020-11-4 19:40:06


页: [1]
查看完整版本: 小白求助