c语言交换两个数的问题???? 在C语言中如何将两个数进行互换

作者&投稿:歹苛 (若有异议请与网页底部的电邮联系)

两段代码的差异是:

第一段代码:将a、b两个数的地址传入swap()函数,此函数内部拿着这两个数的地址,将两个地址下的值做了交换;

第二段代码:将a、b两个数的地址传入swap()函数,此函数内部将这两个地址彼此做了交换(即两个指针所指的地址发生了互换,但相应地址下的数并没有变化)。因为对于函数swap()来说,传入的两个地址是值传递形式的,在其内部是局部作用域下的两个变量,完成这两个地址“值”的交换,并不能对调用时的实参产生影响。故而交换失败。


另外,再给你个无需中间变量交换两个数值的写法:

a = b - a + (b = a);    // 无需中间变量交换a、b的值


你第二的个函数是在改变指针,你可以用指针的指针试试

C语言交换两个数的问题,是和栈有关的!!!~

栈上的是临时变量 你的swap里的x,y都是临时的 只能你swap函数里存活 实际上和main上xy没有关系的

方法1: 使用一个临时变量来进行保存,这应该也是大家最容易想到的方法,话不多说,直接上代码。
参考代码:
#include int main(){ int a = 4; int b = 5; int nTemp; printf("交换前a,b的值为:
"); printf("a=%d
", a); printf("b=%d
", b); printf("
"); nTemp = a; a = b; b = nTemp; printf("----------------------------------我是分割线------------------------------------
"); printf("交换前a,b的值为:
"); printf("a=%d
", a); printf("b=%d
", b); return 0;}运行结果:

c语言交换两个数的问题???
答:两段代码的差异是:第一段代码:将a、b两个数的地址传入swap()函数,此函数内部拿着这两个数的地址,将两个地址下的值做了交换;第二段代码:将a、b两个数的地址传入swap()函数,此函数内部将这两个地址彼此做了交换(即两个指针所指的地址发生了互换,但相应地址下的数并没有变化)。因为对于...

c语言交换两个数的问题???
答:两段代码的差异是:第一段代码:将a、b两个数的地址传入swap()函数,此函数内部拿着这两个数的地址,将两个地址下的值做了交换;第二段代码:将a、b两个数的地址传入swap()函数,此函数内部将这两个地址彼此做了交换(即两个指针所指的地址发生了互换,但相应地址下的数并没有变化)。因为对于...

输入两个整数,交换后输出 C语言怎么编程
答:利用C语言来实现交换两个变量的值,需要定义三个变量:include<stdio.h> int main(){ int x,y,temp;//定义三个变量 printf("请输入分别x和y的值\n");scanf("%d %d",&x,&y);//终端输入变量x、y temp=y;//把y赋值给temp y=x;//把x赋值给y x=temp;//把y赋值给temp printf("%d...

C语言用指针法交换两个数的顺序问题
答:解答:1. 注意形式参数和实际参数的区别,主函数中的x,y是实际参数,swap函数中的a,b是形式参数。他们各有自己的存储空间,互不干扰。2. 在程序适当位置加上输出地址的语句,即可看出为什么回到主程序后,x,y的值为什么不交换。为了更形象,可以用图表示它们的关系:可见,交换的只是swap函数...

c语言两数互换出错?(新手)
答:你这代码问题在于:一、ee参数int m,int n是传值,m,n交换对a,b没有影响。方法1:定义函数int ee();不传值,直接把a,b定义成全局变量。方法2:定义函数int*ee();不传值,ee函数中用static定义数组[2]代替m,n。返回这个数组。在main函数中接收并打印。方法3:定义函数int ee(int*m,int*...

c语言交换两个数,为什么这样不对
答:你的交换函数只是交换了pa和pb指向的地址,每个地址里存的仍是原来的值,也就是:swap(p1,p2),将p1和pa对应,p2和pb对应变成了p1和pb对应,p2和pa对应,但p1,p2,pa,pb指向的地址里的值没发生改变,变的是地址,当然不对。改为:void swap(int *pa,int *pb){ int *p; *p=*pa; ...

C语言 用指针交换两个数 题目要求中间变量用指针变量 不是很理解_百度...
答:使用指针交换两个数据,是指,数据本身不变化,只是通过指针的变化,实现两数的交换(实际上交换的是两个指针的值,即:原来指向a数的指针指向b数,原来指向b数的指针指向a数),参考代码如下:include <stdio.h>void main(){ int a,b; int *pa, *pb, *pt ; pa=&a; pb=&b;...

C语言,函数来交换两个数值,为什么我运行的结果两个数值没有交换?
答:你交换的只是swap函数内的局部变量n,m值,应该改成这样 include<stdio.h>void swap (int *n,int *m) {int temp;temp=*n;*n=*m;*m=temp;}void main(){int a=10,b=20;swap(&a,&b);printf("a=%d,b=%d\n",a,b);}注意函数形参的传值和传地址的区别 ...

在汇编语言中怎样实现两个数互换?
答:交换AX和BX的数据,用以下4种方法可以实现:第一种:将中间变量存储于栈中:SSEG SEGMENT STACK DB 32 DUP (?)SSEG ENDS CSEG SEGMENT assume CS:CSEG, SS:SSEG Main: mov AX, SSEG mov SS, AX mov SP, 32h ; 初始化栈段及栈指针 mov AX, xxx mov BX, yyy ; 分别设置AX和...

C语言写的交换两个数的函数不起作用,哪里有问题
答:这种形参是值传递 而不是引用传递 所以实际上没有改变到外部的实参的值 你要传地址进去才行 exchange(int *a,int *b) 里面a,b都得改成*a,*b 调用是exchange(&a,&b);