函数的传参和返回、以及a,b值交换的三种模式(一种是错误的交换实例)——初学C语言的浪荡第一学期

本文主要是介绍函数的传参和返回、以及a,b值交换的三种模式(一种是错误的交换实例)——初学C语言的浪荡第一学期,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下一个疑惑
函数里面的知识点,传参,返回值

Question 1
有以下程序
fun(int x, int y)
{ static int m=0, i=2;
i+=m+1; m=i+x+y; return m;
}
main()
{ int j=1, m=1, k;
k=fun(j,m); printf("%d,",k);
k=fun(j,m); printf("%d\n",k);
}
执行后的输出结果是 ( B )
A) 5, 5
B) 5, 11
C) 11, 11
D) 11, 5

第一轮输出,由题得f(j,m)就是fun(x,y),即x=1,y=1。而k就等于fun下面函数中的m。所以i+=m+1就是i=i+m+1=2+0+1=3,k=m=i+x+y=3+1+1=5。第二轮输出,i=i+m+1=3+5+1=9,k=m=i+x+y=9+1+1=11。

Thinking 1
首先是这一个题,按照正常思路计算就可以了
然后我又遇到了这一个题

Question 2
以下程序的输出结果是 ( C )
fun(int x, int y, int z)
{ z=x * x+y * y; }
main()
{
int a=31;
fun(5,2,a);
printf("%d",a);
}
A) 0
B) 2
C) 31
D) 无定值

Thinking 2
我一算,??难道不是29???fun前面没写变量名那就是int,这个知识点还是晓得,是不是还有什么知识点没记住呢?

Solution
定义的函数 fun没有返回值,而且参数不是引用型的,所以形参的改变不会影响实参,即 a 的值,输出的是31。要区分第1题,有return,这个题就没有return 。

原来如此,还得有个return才可以。接着我又去查了“引用型”(因为想到了不久之前写的swap交换a和b的值的方式)

Extra Harvest

#include <stdio.h>
#include <stdlib.h>
void swap_1(int x,int y)
{int t=0;t=x;x=y;y=t;
}int main()
{int a=3;int b=5;swap_1(a,b);printf("%d\n%d",a,b);return 0;
}

运行结果:
3
5

也就是说形参交换了位置,但实参a,b并无任何变化,这个时候,我们就要用到“引用型”

#include <stdio.h>
#include <stdlib.h>
void swap_2(int & x,int & y)
{int t=0;t=x;x=y;y=t;
}int main()
{int a=3;int b=5;swap_2(a,b);printf("%d\n%d",a,b);return 0;
}

运行结果出现:error: expected ‘;’, ‘,’ or ‘)’ before ‘&’ token
搜索资料:C语言里面没有所谓的“按引用传递”,C++才可以
解决方案:

  1. 还是用指针,在主函数中传址(现阶段只会这个…)
  2. 将代码扩展名保存成.cpp文件

最终

#include <stdio.h>
#include <stdlib.h>
void swap_3(int * x,int * y)
{int t=0;t=*x;*x=*y;*y=t;
}int main()
{int a=3;int b=5;swap_3(&a,&b);printf("%d\n%d",a,b);return 0;
}

运行结果:
5
3

成功~~

这篇关于函数的传参和返回、以及a,b值交换的三种模式(一种是错误的交换实例)——初学C语言的浪荡第一学期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/699669

相关文章

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表