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

嵌套调用实现数组元素逆序存放

主函数调用reverse_array(int ptr[],int cnt)函数,该函数在调用inplace_swap(int *x,int *y)函数时,把两个不同的地址送给inplace_swap(int *x,int *y)函数,实现这两个位置处元素的交换。

令*x=a,*y=b

则*y= *x^*y执行后,*x=a,*y=a^b.

然后,*x= *x^*y执行后,*x=a^(a^b)=b,*y=a^b.

最后,*y= *x^*y执行后,*x=b,*y=b^(a^b)=a.

两个不同位置处的数实现交换。

源程序

void reverse_array(int ptr[],int cnt);
void inplace_swap(int *x,int *y);

void main()
{
    int array[]={1,2,3,4,5,6,7};
    int cnt=sizeof(array)/sizeof(array[0]);
    reverse_array(array,cnt); 
}

void reverse_array(int ptr[],int cnt)
{
    int first,last;
    for(first=0,last=cnt-1;first<last;first++,last--)
      inplace_swap(&ptr[first],&ptr[last]);
}

void inplace_swap(int *x,int *y)
{
    *y= *x^*y;
    *x= *x^*y;
    *y= *x^*y;
}
当然,把inplace_swap(int *x,int *y)的函数体放在reverse_array(int ptr[],int cnt)中,整体结构就会简单一些,但reverse_array(int ptr[],int cnt)函数的功能就复杂一些。

相关文章:

  • 算法04-希尔排序
  • spring session、spring security和redis整合的简单使用
  • LeetCode 热门100题-合并区间-不熟练
  • 人工智能之姿态估计OpenPose算法源码分析(vgg19,backbone,高斯热度图,单位向量叉乘,向量累加和后求平均,感受野,多个stage纠错)
  • 【数据结构】复杂度
  • AI前端开发与职业倦怠:效率提升的解药
  • 几款dxf文件转Gcode的开源软件
  • SQL CHECK 语句详解
  • vue不是内部或外部命令?
  • Docker 实战与应用:提升开发效率的核心命令与场景解析
  • C语言-章节 1:变量与数据类型 ——「未初始化的诅咒」
  • 相机模数转换
  • Vue响应式原理实现总结(数据劫持Object.defineProperty/Proxy+发布订阅者设计模式)
  • STM32 如何使用DMA和获取ADC
  • 5分钟了解! 探索 AnythingLLM,借助开源 AI 打造私有化智能知识库,熟悉向量数据库
  • 【Unity3D优化】AssetBundle的压缩格式优化
  • Rust 组织管理
  • rk3588部署yolov6
  • Docker配置镜像加速-解决黑马商城部署Mysql失败问题
  • 【算法】递归入门
  • 重庆城市轨道交通拟听证调价:公布两套票价方案,正征求意见
  • 种植耐旱作物、启动备用水源,甘肃各地多举措应对旱情
  • 十年牢狱倒计时,一名服刑人员的期待与惶恐
  • 被围观的“英之园”,谁建了潮汕天价违建?
  • 浙江一家长称小学老师打孩子还威胁要从3楼扔下,当地警方已立案
  • 舞者王佳俊谈“与AI共舞”:像多了一个舞伴,要考虑它的“感受”