通过传送地址值,直接在被调用函数中直接改变实参。是怎么改变的?
麻烦结合以下算法,讲解一下实参是如何改变的,改变过程。实参是怎么改变的?在哪里改变了?不是说从实参到形参的值是单向传递吗?不是说形参不能改变实参吗?这为什么又改变了,怎么...
麻烦结合以下算法,讲解一下实参是如何改变的,改变过程。实参是怎么改变的?在哪里改变了?
不是说从实参到形参的值是单向传递吗?不是说形参不能改变实参吗?这为什么又改变了,怎么个改变法?
请说的通俗一些,感激不尽
#include<stdio.h>
void swap(int*,int*)
main()
{
int x=30,y=20:
printf("(1)x=%d y=%d\n"x,y):
swap(&x,&y)
printf("(4)x=%d y=%d\n"x,y):
}
void swap(int*a,int*b)
{
int t:
printf("(2)x=%d y=%d\n"x,y):
t=*a:*a=*b:*b=t:
printf("(3)x=%d y=%d\n"x,y):
}
输出结果
(1)x=30 y=20
(2)x=30 y=20
(3)x=20 y=30
(4)x=20 y=30
能不能讲解一下swap函数里的变量值是怎么传递到主函数的,求过程,通俗点说或者画个图什么的告诉我主函数里的xy怎么改变的,麻烦了 展开
不是说从实参到形参的值是单向传递吗?不是说形参不能改变实参吗?这为什么又改变了,怎么个改变法?
请说的通俗一些,感激不尽
#include<stdio.h>
void swap(int*,int*)
main()
{
int x=30,y=20:
printf("(1)x=%d y=%d\n"x,y):
swap(&x,&y)
printf("(4)x=%d y=%d\n"x,y):
}
void swap(int*a,int*b)
{
int t:
printf("(2)x=%d y=%d\n"x,y):
t=*a:*a=*b:*b=t:
printf("(3)x=%d y=%d\n"x,y):
}
输出结果
(1)x=30 y=20
(2)x=30 y=20
(3)x=20 y=30
(4)x=20 y=30
能不能讲解一下swap函数里的变量值是怎么传递到主函数的,求过程,通俗点说或者画个图什么的告诉我主函数里的xy怎么改变的,麻烦了 展开
3个回答
展开全部
swap是典型的解释指针用法的教科书例子。。。
如果不用指针,则swap函数的作用仅限于函数内。。。swap(int a,int b)中的a,b的作用域只在函数内,在函数外部是看不到的,a=x,b=y时,传递的是x,y的值,a,b的值改变了,但x,y的值没有变,而函数返回只能返回一个对象,不能同时返回两个对象,也无法把改变后的a,b同时赋值回给x,y。所以在这里是无法实现函数功能的。。。
而swap(int* a,int* b)中a是指针变量,记录的是一个内存地址,a=&x的意思是取x变量的内存地址给a,这样a和&x是同一个地址,*a和x是同一个实际内容的两个名字。。。操作*a就等于操作了x。。。
呃,通俗点的解释就是:
值传递等于克隆,再造了一个和你一模一样的人,但是把那个人怎么操作,对你本身也没影响。。。
指针传递等于给你取了一个新名字,把这个新名字代表的人进行操作,实际就是对你本身进行操作。。。
如果不用指针,则swap函数的作用仅限于函数内。。。swap(int a,int b)中的a,b的作用域只在函数内,在函数外部是看不到的,a=x,b=y时,传递的是x,y的值,a,b的值改变了,但x,y的值没有变,而函数返回只能返回一个对象,不能同时返回两个对象,也无法把改变后的a,b同时赋值回给x,y。所以在这里是无法实现函数功能的。。。
而swap(int* a,int* b)中a是指针变量,记录的是一个内存地址,a=&x的意思是取x变量的内存地址给a,这样a和&x是同一个地址,*a和x是同一个实际内容的两个名字。。。操作*a就等于操作了x。。。
呃,通俗点的解释就是:
值传递等于克隆,再造了一个和你一模一样的人,但是把那个人怎么操作,对你本身也没影响。。。
指针传递等于给你取了一个新名字,把这个新名字代表的人进行操作,实际就是对你本身进行操作。。。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
关键是传指针或者引用,还是传值,前三个就不说了,不管传指针还是引用,都是这个结果,关键是(4)的输出,因为你传的是指针,所以,在函数内部,变量的值变了,在函数外部有效,如果你去掉*指针标志,估计就还是输出x=30,y=20
追问
能不能讲解一下swap函数里的变量值是怎么传递到主函数的,求过程,通俗点说或者画个图什么的告诉我主函数里的xy怎么改变的,麻烦了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询