前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言中函数return单一返回值

C语言中函数return单一返回值

作者头像
黎鹤舞
发布2024-03-19 15:07:42
1340
发布2024-03-19 15:07:42
举报
文章被收录于专栏:黎鹤舞的编程技术栏

C语言中函数的return作用及其原理

很多初学者在使用C语言写函数时,不清楚return返回值原理,在函数的一处return中返回多个值。注意!这个写法是完全错误的,一个return只能返回一个值 下面我讲用一些代码和实例解释 (环境:windows下的visual studio 2019)

return的作用

1.结束函数
代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	printf("hello world!");
	return 0;
}

这是一个在简单不过的函数了,但是很多人在刚入手C语言的时候只顾着抄写着书上的代码,忽视了在这最基本的函数语法中return的作用,就是结束函数。 这个功能有点类似于循环中的break,只不过return更强大一些,直接跳出整个函数。

注:可以有多处return,但是只能从一处跳出。

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int ret()
{
	return 1;
	return 2;
}

int main()
{
	int rec = ret();
	printf("%d",rec);
	return 0;
}

函数的编译是从前往后进行编译的,所以应该是先读到**“return1”**,然后直接结束这个函数,并不会执行return2。

其运行结果如下图所示

注:有些人习惯用void main(){ }的方式来编写主函数,这里非常不推荐这种写法,这是一种老旧的写法。

当然void函数中也可以加入return语句,但是这里的return就不会返回值而是直接结束函数。

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void ret()
{
	printf("return 1\n");
	return;
	printf("return 2\n");
}
int main()
{
	ret();
	printf("hello world");
	return 0;
}

运行结果如下图所示:

可以看到只执行了第一个语句,return之后是直接跳出函数了。

2.返回一个值

return还有一个作用就是返回一个值,当然这个值可以为空。 例如讲第一个函数的return的0删去,代码依旧可以运行。

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	printf("hello world");
	return ;
}

运行结果如下图所示:

重点来了!!! c语言中的return只能返回单一的值 许多朋友在一开始用return的时候尝试过用return返回两个值(下面我用一个 交换两个数的数值函数(swap)为例)

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int swap(int x ,int y )
{
	int temp = 0;
	temp = x;
	x = y;
	y = temp;
	
	return x, y;
}

int main()
{
	int a = 1;
	int b = 2;
	printf("%d %d",swap(a,b));
	return 0;
}

这个代码是可以编译的,没有error提示,但是会弹出警告⚠说printf没有接受足够的参数。 我们来看一下运行结果:

可以看到第一个 %d 接受的是第一个return值 1,第二个 %d 就出现错误了。这说明了return只会返回最后面那个值,即为swap函数return的 y

原理解释

在c语言中,程序的函数的调用是创建一个函数栈帧,并在返回数值之后将其销毁。程序的一开始要开辟一块空间(栈),以便后续开辟函数栈帧。

可以看到return的返回值是建立在新开辟的函数栈帧中esp寄存器临时存储的值,在函数调用完之后把最终return的值放到esp中返回原申请调用的函数中,ebp是在调用函数的栈顶位置,存储esp应返回的地址,随着esp的返回,esp寄存器中的值也随着返回。所以return的值只有esp寄存器带来的返回值一个。

总结

c语言中return语句的功能只有两个 1.结束函数 2.待会返回值,并且返回值有且只有一个

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C语言中函数的return作用及其原理
    • return的作用
      • 1.结束函数
      • 2.返回一个值
      • 原理解释
    • 总结
    相关产品与服务
    对象存储
    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档