函数的传参和返回、以及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

相关文章

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语句中常用的表

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下: