IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言的底层逻辑剖析函数篇(其一),0基础搞定函数,超详解 -> 正文阅读

[C++知识库]C语言的底层逻辑剖析函数篇(其一),0基础搞定函数,超详解

什么是函数?

在C语言中我们如果想要完成一项大的工程,不可能将全部内容一步步敲出来,所以我们引入了函数的概念,一个个的函数就像一个个小的工具一样,来帮助我们进行程序的编写,既节省了时间,又可以在一定程度上提升代码的可读性和效率,函数作为一个个相对独立的部分而存在,提供的功能总结来说是对代码的封装和隐藏,什么意思呢,我们举个例子来帮助理解,比如我们常用的printf函数和scanf函数,我们都知道这两个一个是输出,一个是输入,但是你仔细想想,这两个函数是怎么来实现的呢?你可能并不了解,这就是对过程的封装和对细节的隐藏。

库函数

我们都知道在C语言中提供了一系列的库函数,那么为什么要研发出这些库函数呢?其实在早期C语言中是没有库函数这个概念的,即使是最简单的printf也是程序员自己来写,那么这时候就出现了一些问题,每个程序员写出的函数可能都不相同,大家的水平有高有低,甚至会写出一些bug出来,这时候国际组织就定义的一系列的库函数来作为标准,既然有些函数是大家经常用的,我们就直接定义一个标准的库给出一系列的函数,你直接拿去用就可以了,为了支持可移植性和提高程序的效率,所以C语言的基础库中提供了一系列类似的库函数,方便程序员进行开发。

C语言中库函数如此的多,那么我们如何来学习这么多库函数呢,我们来看一下:www.cplusplus.com,这里给出一个可学习的网站,我们以这个来举例,打开后直接可以在搜索框中来搜索你需要了解的函数比如我们来搜索strcpy,界面如下:
在这里插入图片描述
从这里面我们就可以看到strcpy的用法,关于它的描述,包括下方也举出了示例来帮助理解,当然了如果你觉得英文有点难懂的话也可以看下面这个网站:www.zh.cppreference.com
这个网站其实是C++的官网,当然了C语言和C++是不分家的。这里还是推荐大家学会去看英文版的,因为很多企业内部给出的文献一般都是英文文献,从现在开始培养肯定是一件好事。

自定义函数

我们现在知道了库函数的用途,很容易理解到库函数肯定是不能够解决所有问题的,不然还要程序员做什么,所以自定义函数才是我们真正要重点学习的技能,我们来写一个简单的函数,假设你要求两个数的和,那么用函数应该怎么来解决呢?代码如下:
#include<stdio.h>

int Add(int x, int y)
{
	return (x + y);
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d",&a,&b);
	int sum = 0;
	sum = Add(a,b);
	printf("%d\n",sum);
	return 0;
}

这里就是一个简单函数的举例,我们需要来分析一下函数的构成是哪几部分,首先我们需要有一个函数名,这里我的函数名就是Add,既然是我要调用函数一定要给它参数,Add后括号内就是我给出的参数x和y,类型是整形,我们函数内部要实现两数相加的功能,然后再将两数之和返回来,而返回的同样是整形,所以在函数名之前要加上返回值的类型int。这就是我们函数的各个构成部分,在下面主函数中我们只要将两个参数直接传给Add,它就可以把两数之和给返回来。

这里还有一道练习,判断两个数的较大值,用函数的形式实现,推荐大家自己练习一下,具体代码参考如下:

#include<stdio.h>

int get_max(int x, int y)
{
	return (x > y ? x : y);
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d",&a,&b);
	int ret = get_max(a, b);
	printf("%d\n",ret);
	return 0;
}

函数参数

函数参数主要分为形式参数(简称形参)和实际参数(简称实参),我们需要记住一个结论:对形式参数的改变不会影响实际参数,那么什么是形参呢,其实简单来说就是我们传给函数的参数,这类参数通常生命周期较短,进入函数生成,出函数就销毁,实际参数我们就是我们实实在在定义的参数,在计算机中有自己的存储空间的参数,我们来看一道练习来帮助理解:
我们要将两个数的值进行调换,用函数的形式来实现,代码如下:

#include<stdio.h>

void swap(int* pa, int* pb)
{
	int tmp = 0;
	tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d",&a,&b);
	printf("交换前:a=%d b=%d\n",a,b);
	swap(&a, &b);
	printf("交换后:a=%d b=%d\n",a,b);
	return 0;
}

这个代码我们是需要仔细去研究推敲的,当我们将a和b传过去时,注意我们传过去的是地址,而不是a和b的值,如果并且我们在函数定义时参数定义的也是指针变量,为什么呢,我相信如果你自己一开始写,一定会写成以下形式,

#include<stdio.h>
void swap(int pa, int pb)
{
	int tmp = 0;
	tmp = pa;
	pa = pb;
	pb = tmp;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	printf("交换前:a=%d b=%d\n", a, b);
	swap(a, b);
	printf("交换后:a=%d b=%d\n", a, b);
	return 0;
}

然后你去调试就会发现问题
在这里插入图片描述

这里好像并没有将我的a和b值交换了,不要着急,出了问题我们就要找出来并将它解决,我们调出我们的监视看一下会发现其实pa和pb的地址和a和b的地址是完全不同的,也就是说我们对pa和pb的改变根本不会影响到a和b,我们在函数内部交换的仅仅是pa和pb的值,那么问题就出现在这里,哪门我们将a和b的地址直接传过去交换不就好了吗?所以我们正确的代码就是最开始的那样,还记得我在开头让记住的结论吗:对形式参数的改变不会影响实际参数,相信到这里你已经理解了这句话。一定要记住哦!!!

函数调用

结合上面我们举的几个例子,相信你就很容易可以理解函数调用是怎么个情况,函数调用实际上分为函数传值调用传址调用,传值调用就是我们上面直接将a和b的值传给函数去使用,当我们需要对实际参数进行改变的时候就要考虑传址调用了,直接将参数地址传给函数进行后续操作。

好了,今天关于函数我们只学习这些内容,我们下期再来深入学习函数的其他部分。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:35:33  更:2022-10-31 11:36:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 5:05:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码