Day 10-11:函数、函数传参

news2024/12/24 1:00:05

基本用法以及传参

基本用法

调用

        1.无返回值函数调用

#include<stdio.h>
#pragma warning(disable:4996);
void my_helloworld()
{
	printf("hello world!");
}
int main()
{
	my_helloworld();
	return 0;
}
//输出结果:hello world!

        2.实际参数:就是在使用函数时,调用函数传递给被调用函数的数据。

        应用:编写一个函数,求两个整数的最大值,并在main函数中调用。

#include<stdio.h>
#pragma warning(disable:4996);
int find_max(int x, int y)//x、y是形式参数
{
	if (x > y)
	{
		return x;
	}
	else
	{
		return y;
	}
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d", &a);
	getchar();
	scanf("%d", &b);
	int ret = find_max(a, b);//a、b是实际参数
	printf("最大值:%d\n", ret);
	return 0;
}

声明

        因为函数需要:先声明再调用

        如果要把函数的定义放在main函数之后,要对函数进行声明(因为编译器是自上而下的编译的)。

#include<stdio.h>
#pragma warning(disable:4996);
int find_max(int x, int y);//函数的声明
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d", &a);
	getchar();
	scanf("%d", &b);
	int ret = find_max(a, b);
	printf("最大值:%d\n", ret);
	return 0;
}
int find_max(int x, int y) //函数的定义
{
	if (x > y)
	{
		return x;
	}
	else
	{
		return y;
	}
}

        注意:函数声明后面要加 ; 号。

应用

        1.写一个函数求X^n的值(x是实数,n为正整数)。

        方法一:定义double型变量ret接收返回值。

        方法二:直接打印返回值。

函数传参

        参数传递:将实际参数的值或地址传递给被调用函数的形式参数,从而在函数中完成对数据处理和返回的过程。

        参数传递的方式

        1.全局变量:

        在所有函数体外的变量,一经定义在程序的任何地方可用。

        比如:下图中的global_a变量

        2.值传递:

        调用函数时,将实参传递给被调用函数,被调用函数将创建同类型的形参并用实参初始化。形参是新开辟的存储空间,在函数中改变形参的值,不会影响到实参的值。        

        举例:编写交换两个数的函数,能用值传递实现吗?

#include<stdio.h>
#pragma warning(disable:4996);
void my_swap(int x, int y);
int main()
{
	int n = 10;
	int m = 20;
	printf("&swap before:n = %p m = %p\n", &n, &m);
	my_swap(n, m);
	printf("swap after: n = %d m = %d\n", n, m);
	printf("&swap after:n = %p m = %p\n", &n, &m);
	return 0;
}
void my_swap(int x, int y)
{
	int t = 0;
	printf("before swap:%d %d\n", x, y);
	printf("&swap before:x = %p y = %p\n", &x, &y);
	t = x;
	x = y;
	y = t;
	printf("after swap: %d %d\n", x, y);
	printf("&swap after:x = %p y = %p\n", &x, &y);
}
//&swap before : n = 0000007383FDFC84 m = 0000007383FDFCA4
//before swap : 10 20
//& swap before : x = 0000007383FDFC60 y = 0000007383FDFC68
//after swap : 20 10
//& swap after : x = 0000007383FDFC60 y = 0000007383FDFC68
//swap after : n = 10 m = 20
//& swap after : n = 0000007383FDFC84 m = 0000007383FDFCA4

        回答:不能,因为交换的是新空间里的值(x = 0000007383FDFC60 y =0000007383FDFC68)。

        应用:

        1.打印 n 以内的所有素数,并统计素数的个数。

        

        3.指针传递:

        按地址传递,实参就是变量的地址,形参就是同类型的指针

        特征:被调用函数中对形参的操作,将直接改变实参的值。

        应用:

        1.交换两个数字。

#include<stdio.h>
#pragma warning(disable:4996);
void my_swap(int* x, int* y);
int main()
{
	int n = 10;
	int m = 20;
	int* p = &n;
	int* q = &m;
	printf("p = %p,q = %p\n",p,q);
	my_swap(p, q);
	printf("p = %d q = %d", n, m);
	return 0;
}
void my_swap(int* x, int* y)
{
	int temp = 0;
	printf("x = %p,y = %p\n", x, y);
	temp = *y;
	*y = *x;
	*x = temp;
}
//p = 0000000E15B6F504, q = 0000000E15B6F524
//x = 0000000E15B6F504, y = 0000000E15B6F524
//p = 20 q = 10

        2.编写一个函数,统计字符串中小写字母的个数,并把字符串中的小写字母转化成大写字母。    

数组的传参

        建议复习

        “数组名不是指针,但大多数使用到数组名的地方,编译器都会把数组名隐式转换成一个指向数组首元素的指针来处理。”

Day 5~6 :指针与数组、二维数组

实参、形参归类表(以int类型为例)
分类实参形参
一维数组  ( arr,n )

( int * q , int n ) or ( int q [ ] , int n )

二维数组—行指针

(arr,n)

一维数组在函数间传参

        ⼀维数组传参,形参的部分可以写成数组的形式,也可以写成指针的形式。

        应用1:编写函数,计算一个一维整形数组的所有元素的和。

#include<stdio.h>	
int fun_sum(int* p, int n);
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int n = sizeof(arr) / sizeof(int);
	int ret = fun_sum(arr, n);
	printf("sum = %d\n", ret);
	return 0;
}
int fun_sum(int* p, int n)      //方法1:形参是指针形式。
//int fun_sum(int p[],int n)    //方法2:形参是数组形式。
{
	int i;
	int sum = 0;
	for (i = 0; i < n; i++)
	{
		sum += p[i];//也可以是:*(p+i)
	}
	return sum;
}
//sum = 15

        应用2:对整型数组进行排序,编写排序函数,并调用、

字符数组在函数间传参

        问题引入:编写函数,删除字符串中的空格。

#include<stdio.h>	
void my_delspace(char* s);
int main()
{
	char ch[] = "ab cd ef g";
	my_delspace(ch);
	printf("%s\n", ch);
	return 0;
}
void my_delspace(char* s)
{
	char* p = s;
	char* q = s;
	while (*p != '\0')
	{
		if (*q != ' ')
		{
			*p = *q;
			p++;
			q++;
		}
		else
		{
			q++;
		}
	}
	*p = '\0';
}

二维数组在函数间传参

一级指针

        问题引入:编写一个函数,打印二维数组。

#include<stdio.h>	
void arr_pri(int* p, int n,int m);
int main()
{
	int arr[3][3] = { {1,2,3},{3,4,5},{5,6,7} };
	int n = sizeof(arr) / sizeof(arr[0]);
	int m = sizeof(arr[0]) / sizeof(int);
	arr_pri(arr[0], n, m);//arr_pri(arr,n,m);error(?)
	return 0;
}
void arr_pri(int* p,int n,int m)
{
	int i;
	for (i = 0; i < n * m; i++)
	{
		printf("%d ", *(p + i));
		printf("%d ", p[i]);
	}
}

行指针

        问题:编写函数,计算一个二维整型数组的奇数的个数。

二级指针

        问题:编写函数,计算一个二维整型数组的奇数的个数。

#include<stdio.h>	
const int N = 2;
const int M = 3;
int get_odd(int** p, int n,int m);
int main()
{
	int arr[N][M] = { {1,2,3},{4,5,6} };
	int* p[N] = { arr[0],arr[1]};
	int r = get_odd(p, 2, 3);
	printf("%d", r);
	return 0;
}
int get_odd(int** p,int n,int m)
{
	int i, j,sum=0;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			if (*(p[i] + j) % 2 != 0)
			{
				sum++;
			}
		}
	}
	return sum;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2099403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode每日刷题之438.找到字符串中所有字符异位词

1.题目解析 本题的题目要求是给定一个长字符串s与一个较短字符串p&#xff0c;判断s中是否有一段与p长度相同的字符串是由p打乱而得来&#xff0c;即为异位词&#xff0c;然后返回其开始位置下标&#xff0c;遍历s字符串中所有满足条件字符串的起始位置下标 2.算法原理 我们将p…

android AccessibilityService合法合规采集大众点评app商店商品详情(2024-09-02)

免责任声明: 任何可操作性的内容与本人无关,文章内容仅供参考学习&#xff0c;如有侵权损害贵公司利益&#xff0c;请联系作者&#xff0c;会立刻马上进行删除。 一、原理介绍 1、打开大众点评app商店 public void open_shop(Context context,String shop_id){String url"…

ARM基础知识---CPU---处理器

目录 一、ARM架构 1.1.RAM---随机存储器 1.2.ROM---只读存储器 1.3.flash---闪存存储器 1.4.时钟&#xff08;振晶&#xff09; 1.5.复位 二、CPU---ARM920T 2.1.R0~R12---通用寄存器 2.2.PC程序计数器 2.3.LR连接寄存器 2.4.SP栈指针寄存器 2.5.CPSR当前程序状态寄存…

【MySQL进阶】索引性能分析

1. 索引语法 创建索引&#xff1a; ​ 语法格式&#xff1a;create [unique|fulltext] index index_name on table_name(index_col_name...); 查看索引&#xff1a; ​ 语法格式&#xff1a;show index from table_name; 删除索引&#xff1a; ​ 语法格式&#xff1a;dr…

Spring Boot实现License生成和校验

1.License应用场景 在我们向客户销售商业软件的时候&#xff0c;常常需要对所发布的软件实行一系列管控措施&#xff0c;诸如验证使用者身份、软件是否到期&#xff0c;以及保存版权信息和开发商详情等。考虑到诸多应用场景可能处于离线环境&#xff0c;无法依赖网络进行实时认…

5.数据结构-c/c++二叉树详解(上篇)(遍历方法,完全二叉树)

目录 一. 二叉树的基本介绍 1.2 满二叉树 1.3 完全二叉树 1.4 搜索二叉树 1.5 平衡二叉搜索树 二. 二叉树的常用操作 2.1 二叉树的定义 2.2 创建一个新的节点 2.3 构建一颗树 2.5 销毁一棵树 三.二叉树的前序&#xff0c;中序&#xff0c;后序&#xff0c;层序遍历方…

day-47 子集

思路 利用深度优先遍历算法&#xff0c;对于每个数有选或不选两种抉择&#xff0c;每次遍历到idslen时将p加入答案中 解题过程 选中当前数字&#xff0c;调用dfs函数之后记得还原 Code class Solution {public int len;public List<List<Integer>> listnew Arra…

51单片机的智能台灯设计【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块DS1302时间模块光敏传感器模块人体红外模块按键等模块构成。适用于智能台灯、自动调节灯光亮度等相似项目。 可实现基本功能: 1、LCD1602实时显示北京时间、环境光照强度、手动/自动模式、台灯亮度等信息&#xff1…

笔记整理—uboot番外(1)命令体系

在uboot启动进行命令行的环境下&#xff0c;当输入命令时&#xff0c;将会对命令进行先解析后执行的操作。 uboot/common/cmd_xxx.c 其中就有多个命令体系&#xff08;mian.c和commann.c&#xff09; uboot每个命令都对应了一个相关的函数&#xff0c;由此实现的命令体系与…

字符统计及重排

题目描述 给出一个仅包含字母的字符串&#xff0c;不包含空格&#xff0c;统计字符串中各个字母(区分大小写)出现的次数 并按照字母出现次数从大到小的顺序。输出各个字母及其出现次数。 如果次数相同&#xff0c;按照自然顺序进行排序&#xff0c;且小写字母在大写字母之前&a…

2024年【氧化工艺】考试及氧化工艺最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 氧化工艺考试考前必练&#xff01;安全生产模拟考试一点通每个月更新氧化工艺最新解析题目及答案&#xff01;多做几遍&#xff0c;其实通过氧化工艺操作证考试很简单。 1、【单选题】 废水经生物脱氮工艺、吹脱工艺等…

如何自学通过软考中级系统集成项目管理工程师?

虽然中级项目管理工程师&#xff08;以下简称中项&#xff09;考试相对较容易&#xff0c;但如果你是零基础&#xff0c;不建议完全依靠自学。 中项属于软考的"信息系统"专业&#xff0c;是中级资格。熟悉软考的人都知道&#xff0c;软考包括初级、中级、高级3个级别…

python-uinput虚拟输入

文章目录 python-uinput虚拟输入背景库简介&#xff1a;什么是python-uinput&#xff1f;安装指南&#xff1a;如何获取这个强大的工具&#xff1f;快速上手&#xff1a;五个核心函数的介绍与使用1. 创建虚拟设备2. 模拟键盘输入3. 模拟鼠标移动4. 模拟鼠标点击5. 模拟触摸屏操…

【粒子群算法PSO】基本原理及多种改进方法

【粒子群算法Matlab仿真定制】&#xff1a; QQ&#xff1a;491052175 1. 粒子群算法的发展趋势 粒子群算法&#xff0c;又称粒子群优化算法&#xff08;Particle swarm opyimization, PSO&#xff09;&#xff0c;是近年来新发展起来的进化算法。该算法和模拟退火算法相似&a…

Vue(十二) Vuex、四个map方法的使用、Vuex模块化+namespace命名空间

文章目录 一、Vuex前言&#xff1a;求和案例1. 搭建Vuex环境2. 基本使用3. 常见疑惑4. getters5. 四个map方法的使用(1) mapState(2) mapGetters(3) mapActions(4) mapMutations 6. 模块化命名空间namespace6.1 模块化6.2 模块化后读取数据 一、Vuex Vuex是一个Vue插件&#x…

FPGA与高速ADC接口简介

引言&#xff1a;本文介绍FPGA与高速ADC接口方式和标准以及JESD204与FPGA高速串行接口。 1. 高速ADC与处理器互联需要权衡的因素 如图1所示&#xff0c;ADC模数转换器可以与微控制器、DSP、FPGA以及ASIC均可以实现互联&#xff0c;在进行选择时&#xff0c;需要考虑以下因素&…

强化学习实操入门随笔

碎碎念&#xff1a;经过思考&#xff0c;打通底层逻辑&#xff0c;我认为未来ai的功能是在沟通领域代替人&#xff0c;未来人-人模式&#xff08;媒介是死的语言&#xff0c;比如看古人留下的文字、聊天的暂时不在&#xff09;会变成人-ai替身-人模式&#xff08;符合本人想法的…

上市公司财务数据分析系统

前言 1.拟解决的关键问题或技术: 本研究旨在解决企业在财务管理方面的主要问题,即如何通过对财务数据进行深度挖掘,实现对未来财务趋势的预测和风险的识别。具体地,该研究将重点解决以下问题: 1.构建有效的财务指标体系、设计合理的特征工程和指标构建方法,以充分反映…

Java基于小程序公考学习平台的设计与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

QT实现简易文件夹

使用UI界面实现简易文件夹 1、实现功能 1、双击文件夹&#xff0c;进入文件夹的下一层 2、点击回退按钮、返回上一级 3、如果是文本文件、则调用记事本的程序、显示文本内容 2、widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDir>…