为什么能够改变实参的值?

dainichuhai 2007-07-02 11:49:38
各位达人
指针作形参为什么能够改变main中的实参的值,小弟不理解。请指教越详细越好!
#include<stdio.h>
void swap(int *,int *);
main()
{
int a=10,b=11;
swap(&a,&b);
printf("%d--%d",a,b);
getch();
}
void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}

...全文
225 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
西安风影 2007-07-03
  • 打赏
  • 举报
回复
主程序已经把a,b变量的地址告诉行参了,当然该函数可以改变a,b的值了.
#include<stdio.h>
void swap(int *,int *);
main()
{
int a=10,b=11;
swap(a,b);
printf("%d--%d",a,b);
getch();
}
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
} 这样就不能改变a,b的值。
但是注意一点的是swap函数是无法改变a,b变量的地址值。

所以说函数行参是无法改变对应实参变量的值,但必须看清参数的数据类型,
此处参数是指针而不是a,b变量本身的内容。
believefym 2007-07-02
  • 打赏
  • 举报
回复
因为是直接对指针所指的内存进行操作,当然会改变实参
但是不是指针的话,只是对实参的一个copy进行操作,函数返回后实参还是原来的实参
xlbdan 2007-07-02
  • 打赏
  • 举报
回复
因为指针指向的就是你要交换的变量的地址,所以对指针进行间接运算就相当于对那个变量进行了运算

可以想像成这样:
int a,b;
int *x=&a,*y=&b;

*x=5;*y=6; //现在a=5,b=6了

SoledadWith 2007-07-02
  • 打赏
  • 举报
回复
这是以前教科书上的例题吧

实际上就是自己给自己改变的,指针传递地址,又取其中存放的值,这跟不用指针就是一样了
bargio_susie 2007-07-02
  • 打赏
  • 举报
回复
随便去找本书,看下指针那节。。。即使你们最痛恨的谭老师那书上也对这个问题,用图描述得清清楚楚。。。。
我啃 2007-07-02
  • 打赏
  • 举报
回复
int *指向int(可以修改的)的指针
如果想不能修改指向的内容可以用
const int *指向const int(不可以修改)的指针
sms88 2007-07-02
  • 打赏
  • 举报
回复
指针就是这样子
jun_ma03 2007-07-02
  • 打赏
  • 举报
回复
指针变量是一个指向地址的变量,所以它存储的是变量的地址当变量的地址
改变时,变量里面的值也会随着改变,明白吧!
bestoak 2007-07-02
  • 打赏
  • 举报
回复
函数改变的是指针指向的地址空间里面的值。而函数调用结束后释放的空间是指针变量占用的空间。两个空间不同。所以,结果保留了下来。

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧