c语言中void函数的返回值,是怎么回事,例如下面这个函数

#include<stdio.h>intmain(){voidswap(int*p,int*q);inta,b,*m,*n;a=2;b=3;m=&a;n=&b;swap(... #include<stdio.h>
int main()
{
void swap(int *p,int *q);

int a,b,*m,*n;
a=2;
b=3;
m=&a;
n=&b;

swap(m,n);
printf("%d %d\n",a,b);
return 0;}

void swap(int *p,int *q)
{
int t;
t=*p;
*p=*q;
*q=t;
}

请问这个程序中的被调函数中参数的值是怎么传回主函数的。不是说void类型的函数没有返回值吗?而且值传递是单向的。。
展开
 我来答
lphaff
推荐于2017-10-04 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1565
采纳率:72%
帮助的人:598万
展开全部
void 代表空返回值。即无返回值
所给的案例中,swap函数是一个无返回值函数
但是该函数带两个输入参数
当主函数调用该函数时
只需要给定两个输入参数即可
该函数执行完毕后,无返回值
接下来继续往下执行,执行printf语句。
追问
好古老的问题啊
yz0123zly
2013-03-13 · TA获得超过101个赞
知道答主
回答量:18
采纳率:0%
帮助的人:15.4万
展开全部
返回类型定为void是指没有返回值。
函数返回有两种方式一种是通过返回值返回,一种是通过出参返回。
当一个参数是以指针地址形式传入函数的时候,就很有可能是出参。一个函数使用地址传入数据,他保证地址不变的情况下,改变地址所指向的值,这样就可以做到双向传输了。
就如void swap(int *p,int *q).函数传入了p和q两个地址,而函数内部对p和q的两个地址所指向的数值进行了交换,这样函数表面看起来没有返回值,其实他的两个形参所指向的数值变化了,也就是完成了函数功能了。
追问
你的意思是不是说,值传递是单向的,而地址传递和引用传递是可以双向的?
追答
是的,值传递仅仅只能从函数外往里传,地址和引用传递都可以作为双向的。而且这在具体开发里面应用很普遍。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ligangbin117
2013-03-13 · TA获得超过227个赞
知道小有建树答主
回答量:193
采纳率:50%
帮助的人:87.1万
展开全部
被调函数根本就没有传参数回主函数。这里使用的是指针来改变变量的值。这里传的参数是指针,也就是变量的地址。在调用函数里面用地址改变了变量的值。可能你要对指针多一些理解
更多追问追答
追问
在被调函数中改变了地址中的值,但是主函数是怎么知道的,难道不需要告诉他什么他就可以直接判断地址中的值已经改变了吗  为什么你的回答和下面一位的回答不一样啊 感觉有点冲突,还是我理解错了,能不能去看下啊,我不知道听谁的?
追答
内存地址在程序运行的时候是一致的。你直接改,人家也是去拿那个地址的东西,拿到的当然是改过以后东西。我觉得没有冲突呀。都是指用指针改变变量的值,只是表达的方式不一样啊。可能你有一个矛盾就是别人说多返回值,而我说没有返回值。其实只是说法不一样而已。用指针修改变量的值,也就相当于是返回了值,所以很多地方都说多参返回。但是实际上是没有返回的。。这是概念问题。。把你弄糊涂了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
千江月success
2013-03-13 · TA获得超过827个赞
知道小有建树答主
回答量:1031
采纳率:100%
帮助的人:896万
展开全部
这里是指针传值,修改指针指向的数据,导致数据修改
----------------
但是这个程序有些问题
修改一下
#include<stdio.h>
void swap(int *p,int *q); //C、C++不支持函数嵌套定义

int main()
{
int a,b,*m,*n;
a=2;
b=3;
m=&a;
n=&b;
swap(m,n);
printf("%d %d\n",a,b);
return 0;
}
void swap(int *p,int *q)
{
int t;
t=*p;
*p=*q;
*q=t;
}
追问
嵌套定义不可以吗?那为什么我在vc编译器上可以运行,而且上课老师也是这么讲的啊
追答
我也不明白C怎么回事了,反正最好不要嵌套定义,默认情况C/C++会出错的。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qyxqyxqyxqy
2013-03-13 · 超过11用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:33.1万
展开全部
#include<stdio.h>
int main()
{
void swap(int *p,int *q);

int a,b,*m,*n;
a=2;
b=3;
m=&a;//m就是a的内存地址
n=&b;//n就是b的
内存地址

swap(m,n);
printf("%d %d\n",a,b);
return 0;}

void swap(int *p,int *q)//p q是内存地址,完成p和q所指向的值交换
{
int t;
t=*p;//将p所指向的内存地址的值赋值给t
*p=*q;
*q=t;
}
追问
在被调函数中改变p,q,所指向的地址中的值以后,是不是说,就在被调函数中实现了a,b,中的值的变换  那么,是怎么使得主函数中的值也改变了的(viod函数不是没有把交换后的值重新传回主函数吗?)
追答
函数是返回值了,void,可是主函数压根就没有用这个返回值。
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式