C语言基础:函数的定义与调用[通俗易懂]

C语言基础:函数的定义与调用[通俗易懂]    在前面内容中我们调用了一个标准C的库函数,叫printf,那么如果我们想自己定义函数应该如何来编写程序呢?定义函数又有什么好处呢?因为我们在教材中提及到的例子主要目的是为了让读者对程序的原理有一定的了解,所以设定的例子程序通常都比较简单,基本上在几行到十几行,多一点的也就三五十行代而已,但是在真正的编程工作中,我们需要完成的代码将非常大,所以将代码合理的分为不同的区块是很有必要的,…

大家好,又见面了,我是你们的朋友全栈君。

        在前面内容中我们调用了一个标准C的库函数,叫printf,那么如果我们想自己定义函数应该如何来编写程序呢?定义函数又有什么好处呢?因为我们在教材中提及到的例子主要目的是为了让读者对程序的原理有一定的了解,所以设定的例子程序通常都比较简单,基本上在几行到十几行,多一点的也就三五十行代而已,但是在真正的编程工作中,我们需要完成的代码将非常大,所以将代码合理的分为不同的区块是很有必要的,每一个区块具有相对独立的功能,并为其它程序提供对外调用的参数和返回值,这样由多个区域组成的程序才会让程序阅读者更方便的理解程序设计的理念。并可以通过函数让功能被封装起来,使得一个功能可以在不同的情况下被其它功能调用,函数的概念就是这样产生的。我们来看看函数的定义与使用。

        一、定义函数

        定义一个函数我们需要确定三部分内容:

1.函数的返回值类型

2.函数的名称

3.函数的参数

        确定了以上内容后就可以定义一个特有功能的函数了:

 

int wrongplus(int a, int b)
{
    a = a + 1;
    b = b + 1;
    return a + b;
}

 

        例如上面代码中就定义了一个返回值为int类型的函数,其函数名为wrongplus,一对小括号中的内容为这个函数的参数,也就是说这个函数有两个传入参数int a和int b。在函数体内,分别让a在原来的基础上加1,让b在原来的基础上加1,然后使用return关键字返回a + b的和。如果a的值是2,而b的值是3,那么这个函数的返回值则是7。

        如果我们想定义一个没有返回值类型的函数则需要设计其返回值类型为void,同样,如果我们想定义一个没有参数的函数可以将其参数定义为void,通常如果一个函数没有参数可以在函数名后的小括号里什么都不写,例如:

 

void function1(void)
{
}
void function2() 
{ 
}

 

        二、函数调用与声明

        我们定义了这样一个wrongplus()的函数,那么如何来让其它功能使用它呢?我们看下面程序:

 

#include <stdio.h>
main()
{
	int a = 2, b = 3;
	int c;
	int wrongplus(int a, int b);
	c = wrongplus(a, b);
	printf("%d + %d = %d\n",a, b, c);
}
int wrongplus(int a, int b)
{
    a = a + 1;
    b = b + 1;
    return a + b;
}

2 + 3 = 7

       如果函数的定义是在调用函数的后面(下面)则需要在调用之前声明函数的定义,否则不需要事先声明。声明的意思是告诉编译器,这个函数的返回值类型、函数名和参数。

        我们在调用一个函数时,需要向这个函数传其需要的参数,例如a和b这两个变量,并可以指定另一个变量用于接收这个函数执行后的返回值,比如变量c就接收了函数wrongplus()的返回值,结果为7。但是我们看到程序的运行结果是 2 + 3 = 7,也就是说,执行了函数wrongplus()后,我们虽然对函数内的参数变量分别加1,但主函数main中的a和b的值并没有发生变化。

 

        三、实参与形参

        当我们调用函数时,对其传入的参数和函数体内接收到的参数其实并不是同一个变量。调用函数时向函数传入的参数称作实际参数,简称实参,而函数体内部用于接收外部调用时传入的参数的参数称为形式参数,简称形参

        例如上面例子中,在main函数中定义的变量int a和int b,在调用wrongplus(a, b);时这两变量是实参,也就是将这两个变量的值2和3传入到函数内部。而在函数wrongplus()的函数体内,用于接收这两个参数时的int a和int b则是形参,这是函数体内部额外的两个变量,用于接收2和3这两个值,这两个变量并不是main函数中定义的a和b 。

        在wrongplus()函数体内,对形参做a = a + 1;和b = b + 1;操作,其实只影响到了函数体内部的这两个变量,而并未影响到main函数中的变量a和b的值。所以,在wrongplus()函数体内的a和b的值为3和4,函数运行结果的返回值为7,而在main函数中的a和b两变量的值仍然是2和3,所以printf()函数显示出的结果则是 2 + 3 = 7 。


欢迎关注公众号:编程外星人

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/147528.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 盘点分布式文件存储系统____分布式文件存储系统简介

    盘点分布式文件存储系统____分布式文件存储系统简介在项目的数据存储中,结构化数据通常采用关系型数据库,非结构化数据(文件)的存储就有很多种方式,服务器本地存储、Nas挂载、ftp等等,今天就来盘点一下,分布式文件存储系统。一、分布式存储简介1、什么是分布式存储在开始介绍分布式存储之前,先了解一下,非分布式的存储方案。在单机时代,将文件直接存储在服务部署的服务器上——直连存储(DAS):存储和数据直连,拓展性、灵活性差。为了扩展,将文件和服务分离,通过网络连接——中心化存储(NAS、SAN):设备类型丰富,通过网络互连,具有一定的拓展.

  • 渗透测试常用工具汇总_常用渗透测试工具

    渗透测试常用工具汇总_常用渗透测试工具——D&X安全实验室工欲善其事,必先利其器。回到过去的旧时代,渗透测试是一件非常困难的事,并且需要大量的手动操作。然而如今,渗透测试工具是”安全军火库”中最常使用的装备,一整套的自动化测试工具似乎不仅改造了渗透测试人员,甚至还可以增强计算机的性能,进行比以往更全面的测试。对渗透测试人员来说不用任何自动化工具对网站或者应用程序进行渗透测试是一件十分困难的事。因此选择一个正确的工具则变得尤为重要,正确的选择甚至占去了渗透测试成功的半壁江山。本篇文章就来和大家介绍一…

  • pycharm安装tensorflow版本无法找到_pycharm安装后无解释器

    pycharm安装tensorflow版本无法找到_pycharm安装后无解释器1、TensorFlow安装keras需要在TensorFlow之上才能运行。所以这里安装TensorFlow。TensorFlow需要vs环境,需要wein64位环境,所以32位的小伙伴需要升级为64位系统以后才行。(1)第一种方式使用pip安装如果只想专用cpu加速,安装pipinstall–upgradetensorflow如果想使用gpu加速,还需要安装pipinstall–upgradetensorflow-gpu安装以后还需要cuda显卡驱动,可参考https://

  • sql语句 异常 Err] 1064 – You have an error in your SQL syntax; check the manual that corresponds to your

    sql语句 异常 Err] 1064 – You have an error in your SQL syntax; check the manual that corresponds to your在我们开发的工程中,有时候会报[Err]1064-YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear——这种异常不用多想,肯定是我们的sql语句出现问题,下面…

  • mybatisPlus填坑之逻辑删除

    mybatisPlus填坑之逻辑删除网上大部分的关于mybatisPlus的逻辑删除的配置介绍都是有问题的,原因可能是官网已经做了更新!!!错误如图:正确的配置是:SpringBoot配置方式: application.yml加入配置(如果你的默认值和mp默认的一样,该配置可无): yml文件(区别是多了一个路径db-config,同学们细看了) mybatis-plus:global-c…

  • java json 变量所有的属性[通俗易懂]

    java json 变量所有的属性[通俗易懂]javajson

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号