首页 > 编程知识 正文

c语言数据交换代码,数据交换c语言

时间:2023-05-05 00:41:02 阅读:136622 作者:2148

本文主要介绍了C/C知识点的C语言存储器地址交换,希望通过具体内容对C/C知识点的学习有所帮助。 C语言课很无聊。 因为以前学过C#,所以很无聊。

但我只能说我见过,不能表示我理解。

特别是这个地址交换。 但是我想做一个排序比例算法,里面有一个Swap函数,比较两个个数的大小,保证形参a永远大于形参b,里面正好用了地址交换。

那个时候错了,没有任何效果。为了完成那个工作,我马上重构了一次,把地址交换变成了价格交换。

今天上课正好那个时候赶紧换了代码,但是遇到了没有好好考虑的问题。也就是地址交换无效的问题。

回顾一下当时的处境:

1voidswap(int*a,int*b ) )。

2{

3//swap函数作为一个数据交换函数,完成a、b两个个数的大小比较

4//ba的话交换地址,使左边总是大于右边

5if(*a*b ) ) ) ) ) ) ) )。

6{

7int*c=a;

8a=b;

9b=c;

10}

11//在此完成地址交换

12}

但是,结果不会改变。 例如,传递的变量a=12,b=13。 结束后,a仍然是12,b仍然是13。

当时因为时间问题没有深究,现在老师给了我们同样的问题,这样就暴露了我什么都不知道。

接下来是老师上课的代码。

1voidswap(int*a,int*b ) )。

2{

3int*temp=a;

4a=b;

5b=temp;

6}

同样,地址交换成功,从swap函数体弹出时,全部恢复了原状

这个时候要自己找问题(其实老师在课上已经说过了,但我不打算听。 自己的身体里充满了恶作剧,试图自己实践)。

根据代码的效果反馈,选择了添加断点;

上图显示当前变量a的值为0x004ffa5c,变量b的值为0x004ffa50。 这是交换前的东西。

这里的地址变了。 但是,让我们来看看总体结果

看到这里,我有点绝望了。 地址的数量没有变化。

其原因是什么呢?

请看上面我特意输出的3、4行。

这里一切都清楚地表明了。 让我们先了解一下:

也就是说,我们操作的不是变量实体,这里是详细的模型

根据图例,指针保存着地址。 这里的地址可以是类的地址、函数的地址、指针的地址.我们在*中操作的值,实际上是找到与指针的值对应的物理地址进行操作。

这里有两个结论:

1、指针只能操作一个变量实体的值,不能操作变量实体的地址!

2、形参值不能传递给实参(仅验证) )。

今天的随笔可能很难想。 因为我没有说明这样写代码的理论依据,因为各种原因思路不明确,所以不打算写得太详细

老师在课上教了我们。 这里实际上是对自己推理的验证。 这里的论证思路请读者推敲一下吧

本文将职务坐标整理发布,希望对同学们有所帮助。 详情请关注职位坐标编程语言C/C通道!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。