c语言指针函数互换 c语言交换两个数的值为什么要用指针

c语言 用指针实现两个数的交换

int swap(int *a,int *b)//a与b分别复制主函数x与y的值,即a与x的指向相同,b与y的指向相同

创新互联建站是一家专注于成都网站制作、网站设计、外贸网站建设与策划设计,汾阳网站建设哪家好?创新互联建站做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:汾阳等地区。汾阳做网站价格咨询:028-86922220

{

int *t;

{t=a;a=b;b=t;}//通过交换,a和y的指向相同,b与x的指向相同,但是,x与y没有改变原来指向,这样函数swap结束,a与b消失,输出结果不变

}

换成

int t;

{t=*a;*a=*b;*b=t;}//将改变x和y指向的地址的值,达到交换目的

C语言用指针法交换两个数的顺序问题

解答:

1.    注意形式参数和实际参数的区别,主函数中的x,y是实际参数,swap函数中的a,b是形式参数。他们各有自己的存储空间,互不干扰。

2.    在程序适当位置加上输出地址的语句,即可看出为什么回到主程序后,x,y的值为什么不交换。

为了更形象,可以用图表示它们的关系:

可见,交换的只是swap函数中的a,b值,对主函数中的a,b值没有影响。

3.    修改的方法,将swap的交换变成值的交换。

C语言用指针和函数调换两个整数 帮忙修改

#includestdio.h

void mswap(int *p1, int* p2);//在前边声明一下函数

int main()

{

int a, b, *pa, *pb, swap(int p1, int p2);

scanf("%d%d", a, b);

pa = a;  /*指针pa指向整数a*/

pb = b;  /*指针pb指向整数b*/

printf("a=%d,b=%d\n", a, b);

mswap(pa, pb);  /*调用函数swap,实参为指针*/

printf("a=%d,b=%d\n", a, b);

return 0;//int main()

}

void mswap(int *p1, int* p2)

{

int  t;

t = *p1; *p1 = *p2; *p2 = t;

}

我用的vs2013,貌似系统自带swap,会报错。所以把函数名改成了mswap

C语言指针使用函数交换两个变量的值

这个地方会出现不好理解的东西。

调用函数的时候,你放入了int

a

int

b

但是这其实不是你的main函数中的a

b只是相当于他们的副本,也就是复制了一个a

和b

传入函数

所以你改变的只是传入的副本

也就是复制的副本a

b所以在main函数中打印的ab不会出现变化

依然是a=3,b=6

现在回答第二个问题,怎么会让ab的值变化:传入指针,也就是在main函数中使用a

b的指针,然后吧指针传入到函数里面

这个时候ab就会真正的发生变化,因为指针指向的是ab的物理地址,也就是真正的ab,不是副本,这个时候就会改变ab的值。想要理解,可以去百度传值参数和引用参数。纯手打,望采纳

c语言指针交换求解!!!

你想通过传递变量地址(即指针)来调用子函数,实现改变变量的值。

这样是做不到的,就像为什么不能通过直接交换形参改变变量的值一样,你把传来的指针(即变量地址)直接交换,并不会对main里面的p和q起作用,就是main里面的地址值实际上并没有交换(你可以用%p打印地址看一下),正确的做法是通过传来的地址,改变对应地址里面的值:

#include stdio.h

void swap(int *a,int *b)

{

int t;

t=*a;*a=*b;*b=t;

}

main()

{

int i=3,j=5,*p=i,*q=j;

swap(p,q);

printf("%d %d\n",*p,*q);

}


文章题目:c语言指针函数互换 c语言交换两个数的值为什么要用指针
当前URL:http://myzitong.com/article/doojecd.html