学C的第二十三天【继续深度剖析数据在内存中的存储:3. 浮点型在内存中的存储(重点);练习:1. 有序序列判断;2. 获得月份天数(多组输入);3. 使用指针打印数组内容;4. 使用指针使字符串逆序】-3

简介: (2). 方法二 -- 用数组存储各月的日期(妙呀~):

(2). 方法二 -- 用数组存储各月的日期(妙呀~):

//描述
//KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。
//输入描述:
//多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。
//输出描述:
//针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。
#include <stdio.h>
//平年:
// 1  2  3  4  5  6  7  8  9  10 11 12
// 31 28 31 30 31 30 31 31 30 31 30 31
// 
//闰年:
// 1  2  3  4  5  6  7  8  9  10 11 12
// -- 29 -- -- -- -- -- -- -- -- -- --
// 1 3 5 7 8 10 12 -- 31天
// 4 6 9 11 -- 30天
// 2月 特殊
int get_days_of_month(int y, int m)
{
  int d = 0;
  int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
  //         0 1  2  3  4  5  6  7  8  9  10 11 12
  //使用一个数组把 日期 放进去,把第一个元素随便设置,
  //让1月下标为1,2月下标为2,以此类推
  d = days[m]; //刚好传进来的月份对应数组中的月份下标
  if (((y%4==0 && y%100!=0) || (y%400==0)) && m==2)
    //如果是闰年 并且 月份是2月
  {
    d += 1;//在平年2月的基础上再加1变成29日
  }
  return d;
}
int main()
{
  int y = 0;//年
  int m = 0;//月
  //多组输入:
  while (scanf("%d %d", &y, &m) == 2)
  {
    int d = get_days_of_month(y, m);
    //写个函数计算该年该月的日期,
    //参数为 y 和 m
    //返回值为 对于日期
    printf("%d\n", d);
  }
  return 0;
}

image.png

3. 使用指针打印数组内容

           

(1). 方法一 -- 用for循环进行循环打印:

//使用指针打印数组内容
#include <stdio.h>
int main()
{
  float arr[] = { 3.14f, 99.9f, 66.5f, 0.0f };
  float* p = arr; //把数组名(首地址)放进指针中
  int sz = sizeof(arr) / sizeof(arr[0]); //元素个数
  //使用指针打印数组内容
  int i = 0;
  for (i = 0; i < sz; i++)
  {
    printf("%f ", *p);
    p++;
  }
  return 0;
}

44489cdee49b4ff1afe57ee8e49c088e.png

                   

(2). 方法二 -- 用while循环进行循环打印:

//使用指针打印数组内容
#include <stdio.h>
int main()
{
  float arr[] = { 3.14f, 99.9f, 66.5f, 0.0f };
  float* p = arr; //把数组名(首地址)放进指针中
  int sz = sizeof(arr) / sizeof(arr[0]); //元素个数
  float* q = arr + sz; //使用指针表示元素个数
  //使用指针打印数组内容
  while (p < q)//对比地址大小来判断用不用打印
  {
    printf("%f ", *p++);//先解引用再p++
  }
  return 0;
}

8bc24a4288b64a2c85bf38a69ea19c3c.png

(3). 自定义函数用while循环进行循环打印:

//使用指针打印数组内容
#include <stdio.h>
void print(float* p, int sz)
{
  float* q = p + sz; //使用指针表示元素个数
  //使用指针打印数组内容
  while (p < q)//对比地址大小来判断用不用打印
  {
    printf("%f ", *p++);//先解引用再p++
  }
}
int main()
{
  float arr[] = { 3.14f, 99.9f, 66.5f, 0.0f };
  float* p = arr; //把数组名(首地址)放进指针中
  int sz = sizeof(arr) / sizeof(arr[0]); //元素个数
  print(arr, sz); //调用自定义函数
  return 0;
}


image.png

4. 使用指针使字符串逆序

//字符串逆序
#include <stdio.h>
#include <string.h>
int main()
{
  char arr[10001] = { 0 };
  gets(arr);//输入数组数据,gets可以把空格也读入
  int len = strlen(arr);
  //进行逆序:使用 left 和 right
  char* left = arr; //左指针
  char* right = arr + len - 1; //右指针
  while (left < right)//两指针中间还有值就继续换
  {
    char tmp = *left;
    *left = *right;
    *right = tmp;
    left++;
    right--;
  }
  printf("%s\n", arr);
  return 0;
}


image.png

补充:

             

  • 32位系统下:

int4个字节指针表示地址空间个数,总共有2^32个,故占4个字节

  • 64位系统下:

int4个字节指针表示地址空间个数,总共有2^64个,故占8个字节

  • 整型指针+1,是向后偏移一个整型

       

  • 指针 - 指针 得到的是 指针和指针之间的元素个数

           

  • 指针就是地址指针比较大小,就是地址比较大小地址也是有大小之分

相关文章
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
181 3
|
消息中间件 存储 缓存
kafka 的数据是放在磁盘上还是内存上,为什么速度会快?
Kafka的数据存储机制通过将数据同时写入磁盘和内存,确保高吞吐量与持久性。其日志文件按主题和分区组织,使用预写日志(WAL)保证数据持久性,并借助操作系统的页缓存加速读取。Kafka采用顺序I/O、零拷贝技术和批量处理优化性能,支持分区分段以实现并行处理。示例代码展示了如何使用KafkaProducer发送消息。
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
541 12
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
368 4
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
监控 算法 应用服务中间件
“四两拨千斤” —— 1.2MB 数据如何吃掉 10GB 内存
一个特殊请求引发服务器内存用量暴涨进而导致进程 OOM 的惨案。
371 14
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
184 2