这两个程序有什么区别呢,为什么第一个可以改变a和b的值,第二个不可以呢。

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-24
为什么第一个可以交换值,第二个不可以

我认为这两个函数都不能互换。

我给你个写个互换函数
void swap(int *p,int*q)
{
int t;

t=*p;

*p=*q;

*q=t;

}
直接调用就行,
*p和*q就是一个int型的变量,直接用定义int t,就行在定义一个*t,这么多指针你看的不乱吗?

a、b是全局变量
在fun1里面 变量被改变
全局变量是方法内外都可以使用的

虽然两个都是把地址传给子函数了,但我们可以注意到第一个中是把地址中的值取出来,准确的说是拷贝了一份,或者“非破坏性读出”,读出的两个拷贝值相互交换,不过这对a和b所在的地址存储的值并没有影响,因此那个子函数并没有使a和b的值交换。
第二个中就不同了,他传过去的地址相互交换,也就是p1原本存的是a的值,p1与p2交换,相当于此时p1存储的是b的值了,故a和b的值就发生了交换。。。

第一个是指针所指向的地址所存储的值,即a=2,b=3,是2 3这两个存储的值的交换
第二个是指针指向的地址的值,是&a,&b,
打个比方,好比a和b是两个盒子,里面是两个球,盒子编号是1和2,第一个就是交换了两个盒子里的球
第二个只是将1和2两个盒子的编号1和2交换了,盒子以及盒子里的球都没换,位置也没变。

第二个程序,子函数仅交换了变量a和b的存储地址,但对于变量a和b的值并未改变。而第一个程序的子函数中,把两个指针所指向的变量进行了交换。可以这样认为:p1和p2代表变量a和b的存储地址,而*p1、*p2表示变量a和b的值

第一个代码 *m *n是变量a b的值 ,改变*m *n就是改变 a b的值
第二个代码 t是指针,你只是改变指针指向不同的变量

第一个是地址所在的值的交换
第二个是地址的交换,值并没有交换,所以a b不变

  • 这两个程序有什么区别吗?,为什么答案不一样;
    答:1、第一个是 s 是在for里面,每次都是新的一个 s =0 2、第二个是 s 是在for外面,都是同一个 s 3、还要理解下:break跳出,只会跳出第一个for,不会跳出所有的for 把上面三点弄明白了,你就知道为啥不一样了
  • ...第一个的值调换,第二个不变,这两个程序有什么区别?
    答:前面那个是是不能改变交换的,只有后面那个函数才可以交换的,因为前面那个是值传递的,只能单向传递,后面那个函数是通过地址进行传递的,改变的是地址内部的值,是可以进行传递值的。另外,每个函数后面都需要加上return 0;
  • C语言高人请进!这两个程序有什么区别?
    答:第一个程序中,flag赋值为0后直接跳出里面那个for循环,flag值不会再改变,进入下面的判断程序。你的程序,flag赋值为0后还在里面的for循环里继续循环,也许下一次循环时,flag值又被赋值为1了,那么这个就无法正确判断flag值到底应该是几了,所以一旦flag值被赋值为0,就要马上跳出,避免flag重复赋值,这...
  • c++问题:这2个程序有什么区别吗,求神犇解答
    答:第二个的最后一个printf中的num前多了&
  • 单片机类。用c语言写程序!!下列两个程序有什么不同,为什么结果相差那么...
    答:chch说的对,你两段代码中唯一不同的,case2 和case4中延时语句的位置不同,这个应该就是你第二段代码出现的结果不同于第一段代码的原因
  • 求这两个程序的区别以及它们的流程图,最好能再有它们结构的分析,跪求...
    答:其实两个程序的关键是那个max函数。流程图就不给了。区别是:第一个max声明了一个指针变量z,谁大它就指向谁,返回的是指针,即最大值的指针;第二个max声明的是一个非指针变量z,最后返回这个最大值。但要注意第一个程序可能会出问题,因为max返回的是指针,因此打印语句应该使用指针对象而不是指针...
  • 一道C语言的题:请问下面的的两个程序有何区别,,部分程序省略了,系统中...
    答:第一个程序在数族xx[i][0]在二维数组变化前赋值的,第二个程序在数组成员xx[i][t-1]发生变化后在个xx[i][0]赋值的,主要区别在于x[i][t-1]不一样!
  • 这两个程序有什么区别吗??我搞不懂呀,谢谢指教!
    答:有啊。。区别大了。。只要a>b第一程序结果总是第一次输入的数,或是第二次输入的数。因为你在max()里边比较的是两个地址,这样的话就是老是大的地址的结果。第二程序就不同了。你先比较的数。又交换了地址。这个是正确的做法。。。对不对你试下吧。。我好久没有看过这了。。。忘了快。
  • s7-300里这两个程序有什么区别??求大神
    答:区别在与第1个不管上路还是下路只要一路通就会有输出!第2个除非上路下图一起通才会有输出!原因在于线圈数量!PLC编程要求输出线圈只能出现一次!线圈通了就有输出,线圈没通就没输出!但是你看你2个,如果上面第1条通了,但是第2条没通,你的线圈Q1.2到底是输出呢?还是不输出呢?所以,上面的程序...
  • 单片机定时器问题,下面有两个程序,为什么同样的程序一个自动运行,一个...
    答:第一个程序:本身就是以定时器溢出速率来产生一个1K的波形,中途没有任何关闭定时器且同时关闭蜂鸣器的语句,输出到蜂鸣器肯定一直响了。第二个程序:几百个us对于人眼来说根本看不清楚,当你按下中断按键时由于他的优先级高于定时器,所以定时器中断无法执行了,因此x的值变成了定值显示在数码管上。