学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,是向后偏移一个整型

       

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

           

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

相关文章
|
3月前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
53 3
|
3月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
3月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
3月前
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。
|
3月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
3月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
81 4
|
3月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
68 6
|
3月前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
63 2
|
3月前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
50 1
|
4月前
|
存储
如何使用指针数组来实现动态二维数组
指针数组可以用来实现动态二维数组。首先,定义一个指向指针的指针变量,并使用 `malloc` 为它分配内存,然后为每个子数组分配内存。通过这种方式,可以灵活地创建和管理不同大小的二维数组。

热门文章

最新文章