C语言使用函数必须知道的3点注意事项!

C语言是面向过程的,而C++是面向对象的

C和C++的区别:

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。


这次与大家分享的是我对 C 语言中函数使用注意事项的小短文,希望能帮助有疑惑的同学更好的使用这个强大的语言特性。

大家在高中的时候都求过数学函数的表达式,其实编程语言的函数与数学表达式实际上是一样的。

我们都可以将其理解为一个有输入有输出的「功能黑箱」,看下图:


就类似给函数一个 x 值,可以求结果一样,给函数一些输入参数,也可以得到相同的输出结果。

C/C++交流裙815393895


1. 模块化编程

为什么要使用函数呢?其实是为了更好的维护软件的功能以及实现模块化编程。

你可以想下如果把所有的功能都写在 main 函数中,那该多么可怕,估计没人会读你写的代码。

通过使用函数可以使我们的软件逻辑性更强,单独的功能写在单独的函数中,还可以方便后期复用等等,好处还有很多实在列举不完。

其中比较重要的作用要说:模块化编程和代码复用了,建议你去找实际的项目看看代码组成,自然就理解了。


2. 函数的副本机制

很多初学者都搞不清楚函数的副本机制,例如下面的交换函数:


这个函数是错误的,因为函数在进行参数传递的时候,会将传入参数 m,n 的值拷贝给函数的形式参数 a,b。

因此在函数内部交换的是形式参数 a,b 的值,而不是交换传递时 m,n 变量的值。

函数的副本机制从内存的角度来说就是:在函数进行参数传递的时候,实参和形参的内存地址是不同的。

这是这个例子的输出结果,每个人的机器可能都不同:

C/C++干货裙815393895
可以看到变量 m 和 a,以及 n 和 b 的内存地址均不同,因此对值的交换也是不起作用的。

但是使用指针就完全不同了,看下面这个例子:


这个函数才是正确的交换函数,为什么呢?

因为我们这里传递的是 m,n 的内存地址,即传递的是指针,所以在函数内部对指针解除引用就可以直接访问这个地址的内容了,这是指针提供的特性。

那么是否就意为着传递指针就没有副本机制了呢?这也是错误的,指针也是变量,本质上与 int 没有区别,只是特性不同罢了。

上面例子在传递指针的时候,也是将 m,n 的地址拷贝给 pa,和 pb,也是存在副本机制的。

只不过这里拷贝的是地址而不是值,在内部通过指针的解引用操作可以直接访问 m,n 的内存地址,进而进行交换。

因为指针非常重要,所以建议你自己运行这个程序,可以看到输出结果中 pa 指向的是 m 的内存地址,而 &pa 是指针变量 pa 的内存地址,这两个千万不要搞混了。

一定时时刻刻记住下面的结论:

1. 一个 int 变量有自己的内存地址,也有自己存储的整数值

2. 一个指针变量有自己的内存地址,也有自己存储的指向地址值

3. 变量在内存中都有自己的地址和其存储的内容

C/C++交流裙815393895
3. 函数的参数传递顺序

VC 和 gcc 编译器计算函数参数的顺序都是从右向左,这个特点一点要记住,面试可能会问到。

你可以使用下面这个程序去验证,程序比较简单,留作给你的思考(不去思考就等于浪费时间看 cd 这篇文章了):


好了,今天就到这里。

写在最后

编程最重要的练,重复写。
作者:CC我的
 

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

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

相关文章

C语言/C++编程学习:C语言环境设置!

C语言是面向过程的,而C++是面向对象的 C和C的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得…

C语言指针原来也可以这么的通俗易懂!

C语言是面向过程的,而C++是面向对象的 C和C的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得…

C语言过时了?你在做梦?

为什么要使用C语言? 在过去的四十年里,C语言已经成为世界上最流行、最重要的一种编程语言。 C是一种融合了控制特性的现代语言,而我们已发现在计算机科学的理论和实践中,控制特性是很重要的。其设计使得用户可以自然地采用自顶向…

C/C++的转义字符详解

所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCI…

C语言深入理解!助你向大佬迈进!

Dennis Ritchie 过世了,他发明了C语言,一个影响深远并彻底改变世界的计算机语言。一门经历40多年的到今天还长盛不衰的语言,今天很多语言都受到C的影响,C,Java,C#,Perl, PHP&#xf…

【初涉C语言】程序员欢迎来到C语言的世界!

计算机发展史 机器语言所有的代码里面只有0和1优点:直接对硬件产生作用,程序的执行效率非常高缺点:指令又多又难记、可读性差、无可移植性汇编语言符号化的机器语言,用一个符号(英文单词、数字)来代表一条…

C语言和C++的区别整理详解!

c和c主要区别 根据书中的描述,进行了整理 推荐一个我自己的C/C交流裙815393895 1、 源代码文件的扩展名 摘自1.4.1 C实现源代码文件的扩展名UNIXC、cc、cxx、cGNU CC、cc、cxx、cpp、cDigital Marscpp、cxxBorland CcppWatcomcppMicrosoft Visual Ccpp、cxx、cc…

揭示C语言函数调用的本质解析

C语言是面向过程的,而C++是面向对象的C和C的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到…

C语言的关键字和详细介绍

C语言是面向过程的,而C++是面向对象的C和C的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到…

【C语言简介】C语言的前世今生

C语言的发展历史: 20世纪70年代初,贝尔实验室的Dennis Richie 等人在B语言基础上开发出C语言,最初是作为UNIX的开发语言; 20世纪70年代末,随着微型计算机的发展,C语言开始移植到非UNIX环境中,并…

C语言/C++编程学习:不找C/C++的工作也要学C/C++的原因

C语言是面向过程的,而C++是面向对象的 C和C的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得…

C\C++中声明与定义的区别

C语言是面向过程的,而C++是面向对象的 C和C的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得…

C++ 虚函数和虚继承解析

本文针对C里的虚函数,虚继承表现和原理进行一些简单分析,有不对的地方请指出。下面都是以VC2008编译器对这两种机制内部实现为例。 有喜欢或者想学习C/C的朋友加一下我的C/C交流群815393895。谢谢大家的支持 虚函数 以下是百度百科对于虚函数的解释&a…

【网络攻防】精通C语言的黑客才是真正的黑客!

精通C语言的黑客才是真正的黑客 黑客界,有两样重要的课程,一是计算机的本质,二是编译原理。相对于汇编等底层语言,它简单;相对于其它高级语言,它更为接近计算机;同样它对黑客的两大课程很有帮助…

我两小时学完指针,你学会数组/指针与函数需要多久?

数组与函数: 这段函数中 函数的参数是数组,注意数组作为函数参数时,数组名和数组元素个数时分别传递的。 指针与函数: 这段函数中的参数是指针变量,传入的是数组的数组名或者首元素的地址,然后用引领操作…

【C语言】C语言结构解析

C 程序结构 在我们学习 C 语言的基本构建块之前,让我们先来看看一个最小的 C 程序结构,在接下来的章节中可以以此作为参考。 喜欢编程的或者想学习编程的朋友可以加一下我的C语言编程交流群815393895,谢谢大家的支持 C Hello World 实例 C…

每一个程序员都是自学成才?

为什么CS学位并非是成为开发人员的唯一路径,因为每个开发人员在工作于他们的项目时学到了很多很多。 学习编程并不难 有兴趣学习或者已经在学习C语言的朋友可以加一下我的编程交流群815393895 除了CS学位,还有很多成为程序员的方法。如果你正行进在一…

不妨问问自己,学习C语言是为了什么?

1、首先是鸡汤,也就是为什么要学C语言。你可以先问自己,为什么我要学C语言?是为了应付考试,还是为了应聘,还是为了提高自己的编程能力。我想说的是,如果你打算以后长期从事计算机方面的工作,你就…

C语言灵魂——算法!

程序的灵魂—算法 一个程序应包括: 对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure)。 对操作的描述。即操作步骤,也就是算法(algorithm)。 Nikiklaus Wir…

为什么会有那么多人放弃编程?

为什么许多编程人员最后都放弃了呢?小编帮你理清下原因,主要有以下几个 为什么这么多人选择放弃学习编程? 加班加点是家常便饭 在软件行业不加班的公司不是很多,区别就是加班强度。为什么程序员需要加这么多班,软件是一…