当前位置: 首页 > news >正文

CExercise_07_1指针和数组_2数组元素的逆序数组逆序(指针版 reverse_by_ptr 和下标版 reverse_arr)

题目:

数组元素的逆序。要求使用[]运算符以及纯粹指针操作两种方式来完成。


关键点

arr[i] = arr[len - 1 - i];
arr[0]=arr[len-1];
如果数组序列是偶数,则调换最中间一对为止;若为奇数,则单出一个不用反转.
思想就是长度取一半 eg:8/2, 9/2=4.5,反转一半,到5时固定,反转完毕.
若使用数组下标方法i < len / 2:只需要遍历前一半元素,否则会交换两次导致恢复原状.


分析:

在这里插入图片描述


代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

/*
数组元素的逆序。要求使用[]运算符以及纯粹指针操作两种方式来完成。
*/

// 使用指针操作逆序数组中的元素
void reverse_by_ptr(int *arr, int n) { //int n 表示数组的长度(元素个数)
    // 定义起始指针指向数组的第一个元素
    int *start_ptr = arr;
    // 定义结束指针指向数组的最后一个元素
    int *end_ptr = arr + n - 1;

    // 当起始指针小于结束指针时,执行循环
    while (start_ptr < end_ptr) {
        // 交换两个指针指向的元素
        int temp = *start_ptr;
        *start_ptr = *end_ptr;
        *end_ptr = temp;
        // 将起始指针后移一个元素,将结束指针前移一个元素
        start_ptr++;
        end_ptr--;
    }
}

// 先用纯粹的C基础代码来实现, 不用指针操作, 只用[]取下标运算
// 这个操作无需额外的临时数组, 直接原地交换就可以实现了
// 0 <-> len - 1, 1 <-> len - 2.... i <-> len - i - 1

/*
    void reverse_arr(int arr[], int len) { 
                        //int arr[]:数组(实际传递的是指针,但可以使用 [] 访问)。
                        //int len:数组的长度。
        for (int i = 0; i < len / 2; i++) {
            int tmp = arr[i];
            arr[i] = arr[len - 1 - i];
            arr[len - 1 - i] = tmp;
        }
}*/
int main() {
    int arr1[] = { 1, 2, 3, 4, 5 };
    int n1 = sizeof(arr1) / sizeof(arr1[0]);
    printf("原始数组为:");
    for (int i = 0; i < n1; i++) printf("%d ", arr1[i]);
    printf("\n");
    reverse_by_ptr(arr1, n1);
    printf("指针版逆序:");
    for (int i = 0; i < n1; i++) printf("%d ", arr1[i]);
    printf("\n");

    /*
        int arr2[] = { 1, 2, 3, 4, 5 };
        int n2 = sizeof(arr2) / sizeof(arr2[0]);
        reverse_arr(arr2, n2);
        printf("下标版逆序: ");
        for (int i = 0; i < n2; i++) printf("%d ", arr2[i]);
        printf("\n");
    */

    return 0;
}

	

在这里插入图片描述


解决方案总结:

指针版(reverse_by_ptr):

使用 *ptr 解引用和指针运算 (ptr++, ptr–)。 适用于需要高效内存操作的场景。

下标版(reverse_arr):

使用 arr[i] 访问数组元素。 代码更直观.
在这里插入图片描述

相关文章:

  • NVIDIA H100 vs A100:新一代GPU架构性能对比分析
  • 第五章:5.1 ESP32物联网应用 - MQTT协议深度教程
  • 大厂文章阅读
  • 速盾:高防CDN节点对收录有影响吗?
  • 深入解析 Microcom:嵌入式串口调试利器
  • 代码随想录算法训练营Day27 | Leetcode 56. 合并区间、738.单调递增的数字、968.监控二叉树
  • C++中的设计模式
  • Linux中的Vim与Nano编辑器命令详解
  • 第8课:多智能体系统评估与迭代
  • 【模板】缩点
  • GPU算力优化
  • 敏感词过滤算法
  • swift菜鸟教程1-5(语法,变量,类型,常量,字面量)
  • centos7.9 升级 gcc
  • 杂 题 (日常练习)
  • 【千问大模型API申请教程】
  • VitePress 项目部署 cloudflare page 提示 npm run build 错误
  • 简明使用pybind11开发pythonc++扩展模块教程
  • 《高绩效教练》(第5版)第二部分第4章总结
  • LeetCode.2999. 统计强大整数的数目
  • 怎么做站旅游网站上泡到妞/永州网站seo
  • 湛江网站建设公司哪家好/网站流量统计分析工具
  • 校园网站设计/那个推广平台好用
  • 外部网站可以做链接到淘宝吗/百度在全国有哪些代理商
  • 建设公司网站需要多少天/seo公司 杭州
  • 杭州公司网站域名续费/小红书关键词排名