• 用指针实现逆序存放数组元素的值


    1 题目

    函数:invert()

    功能:用指针实现逆序存放数组元素的值

    描述:使用指针将数组中的元素值逆序放置,并且将结果打印出来

    2 思路

    1. 程序变量中两个数字进行交换的三种方法

    第一种:引入一个中间量

    temp=a;
    a=b;
    b=temp;
    

    第二种:要注意的是a+b可能会超过int的范围,这个是该方法的缺点

    a=a+b;
    b=a-b;
    a=a-b;
    

    第三种:这种方法效率最高,推荐使用

    a=a^b;
    b=a^b;
    a=a^b;
    

    2. 指针的使用

    使用指针对数组内容进行操作,数组 a, a 指向数组首位置,a+N-1 指向最后一位。从而利用循环对数组的首尾数字逐个替换

    3 代码

    #include <stdio.h>
    #include <stdlib.h>
    #define N 10
    
    /**
    函数:invert()
    功能:用指针实现逆序存放数组元素的值
    描述:使用指针将数组中的元素值逆序放置,并且将结果打印出来
    **/
    
    
    void invert(int *a) {
        int *begin, *end, mid;   // 定义首尾指针
        begin = a;
        end = a+N-1;
        mid = (N-1)/2;             // 中间位置
        int temp;
        for (int i = 0; i <= mid; ++i){    // 循环,首尾指针内容变换
            // temp = *begin;
            // *begin = *end;
            // *end = temp;
            *begin = *begin ^ *end;
            *end = *begin ^ *end;
            *begin = *begin ^ *end;
    
            ++begin;
            --end;
        }
    }
    
    
    int main(int argc, char const *argv[]) {
        int a[N] = {1,2,3,4,5,6,7,8,9,10};
        printf("当前数组中的值为:");
        for (int i = 0; i < N; ++i) {
            printf("%d ", *(a+i));
        }
        printf("
    ");
    
        invert(a);
        printf("使用指针逆序后数组中的值为:");
        for (int i = 0; i < N; ++i) {
            printf("%d ", *(a+i));
        }
        printf("
    ");
    }
    

    示例结果:

    $ gcc ex018.c -o demo
    $ ./demo
    当前数组中的值为:1 2 3 4 5 6 7 8 9 10
    使用指针逆序后数组中的值为:10 9 8 7 6 5 4 3 2 1
    

    最后

    在这里给大家准备了几百本的互联网技术类书籍,需要的来下载吧!点击获取
    有任何问题,欢迎随时交流!!!

  • 相关阅读:
    Unity shader with lightmap
    清理数据库日志
    Sqlserver数据库还原一直显示“正在还原…”解决方法
    如何查看 SQL Server 执行的历史 SQL 语句记录?
    MYSQL 命令行大全 (简洁、明了、全面)
    C#Datatable导入sqlserver数据库中,三种常见,快捷的方法
    MongoDB下载页面
    等级保护和分级保护区别与联系
    等级保护和分级保护
    SQL2005EXPress自动备份
  • 原文地址:https://www.cnblogs.com/johngo/p/14816845.html
Copyright © 2020-2023  润新知