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

 我来答
佳黛218
2019-01-15 · TA获得超过239个赞
知道小有建树答主
回答量:65
采纳率:55%
帮助的人:28.5万
展开全部

解答:

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

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

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

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

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

韦默索冰真
2020-06-10 · TA获得超过3693个赞
知道大有可为答主
回答量:3173
采纳率:25%
帮助的人:210万
展开全部
int
*p1,*p2,p;
p1
,p2
是一个指针,
例如:
int
*p1
,p;
p
=
100;
p1
=
&p;
p1
是指向一个int类型变量,
p1,的内容是所指变量p的地址,
即p在内存中地址,
如果p的内内存地址是0xffff11aa,
那p1的数值是
0xffff11aa,
*p1
是取得该变量的数值,
即p的数值,
100.
而p
是一个int类型的变量
,
p的内容是一个数值,即100.
按你所操作:int
*p1,*p2,p;
p=p1;
p1=p2;
p2=p;
你没有对三者做初始化
,
他们的内容应该是随机的,
p=p1,
将p1(某一个内存地址)赋值给p,
p1=p2,
将p2(另外一个某内存的地址)赋值给p1,
p2=p,
将p(随机数值)赋值给p2,
理论上是可以的,
因为内存地址也是一个32位的数值,
但是可能会引起系统段错误.
是错误的用法.
指针是什么类型?
指针就是一个地址.
本质就是32位的数值.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
容昆别赞
2019-12-19 · TA获得超过3808个赞
知道大有可为答主
回答量:3049
采纳率:27%
帮助的人:236万
展开全部
解答:
1.
注意形式参数和实际参数的区别,主函数中的x,y是实际参数,swap函数中的a,b是形式参数。他们各有自己的存储空间,互不干扰。
2.
在程序适当位置加上输出地址的语句,即可看出为什么回到主程序后,x,y的值为什么不交换。
为了更形象,可以用图表示它们的关系:
可见,交换的只是swap函数中的a,b值,对主函数中的a,b值没有影响。
3.

修改的方法,将swap的交换变成值的交换。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
董茜沈康复
2019-11-10 · TA获得超过3975个赞
知道大有可为答主
回答量:3136
采纳率:33%
帮助的人:189万
展开全部
你试一试看如下的程序是否能够正常交换两个整数的数值
void
main(
)
{
void
swap(int
*a,
int
*b)
;
/*
函数原型说明
*/
int
a,
b
;
scanf(
"%d
%d",&a,&b
)
;
printf("Before
swap:
%d
%d\n",a,
b
)
;
swap(
&x,
&y
)
;
/*
调用交换两个整数的子函数,实参为指向整型的指针
*/
printf("After
swap:
%d
%d\n",
a,
b
)
;
}
void
swap(
int
*
a,
int
*
b
)
/*
交换两个整数的子函数,形参为指向整型的指针
*/
{
int
*
t
;
/*
定义一个临时指针变量
*t,以下三行用于进行两个整数的交换
*/
(
*t
)
=
(*
a)
;
(
*a
)
=
(*
b)
;
(*
b
)
=
(*
t)
;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
闵真弭雅惠
2019-04-28 · TA获得超过3915个赞
知道大有可为答主
回答量:3043
采纳率:32%
帮助的人:246万
展开全部
swap只是把指针地址给交换了,但是虚参是不能改变实参的,看起来是把地址交换了,但实际上等同于没换
所以,并没有改变指针地址里存的内容
#include<stdio.h>//这是用函数调用的方法,为什么这个方法为什么就不能实现。
void swap(int *a,int *b)
{
int t;
{t = *a;
*a = *b;
*b = t;}
}
void main()
{
int a,b,*x,*y;
scanf("%d %d",&a,&b);
x=&a;y=&b;
swap(x,y);
printf("%d %d\n", *x, *y);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式