C语言函数(函数分类,参数,调用,声名及定义)

article/2025/5/8 3:21:49

文章目录

    • @[TOC](文章目录)
    • 一、C语言中函数的分类
    • 二、函数的参数及调用
    • 三、函数的嵌套调用和链式访问
    • 四、函数的声名和定义

一、C语言中函数的分类

  1. 库函数
  2. 自定义函数

库函数:在开发的过程中,每个程序员都可能用得到,为了支持可移植性和提高程序的效率,C语言基础库中提供了一系列类似(strcpy:字符串拷贝函数)库函数,方便程序员进行开发。
查找和学习库函数可以简单看看:cplusplus官网
库函数有:

  • IO函数:如:printf scanf getchar putchar 等
  • 字符串操作函数:如:strcmp strlen 等
  • 内存操作函数:如:memcpy memcmp memset 等
  • 时间/日期函数:如:time 等
  • 数学函数:如:sqrt pow 等
  • 其他函数
    这里就不多介绍了

函数中更加重要的是自定义函数:
自定义函数:和库函数一样有函数名,返回类型和函数参数,但是不一样的是这些都要我们自己设计。

函数组成如图:
在这里插入图片描述
例如:函数求两个数的最大值:

int get_max(int x, int y)
{int z = 0;if (x > y)z = x;elsez = y;return z;//返回函数多的最大值
}
int main()
{int a = 10;int b = 20;//函数的调用int max = get_max(a, b);printf("%d\n", max);//打印20return 0;
}

二、函数的参数及调用

写一个函数交换两个数的值:

  • 第一种方式实现:
//函数返回类型void,表示函数不返回任何值。
void Swap1(int x, int y)
{int z = 0;z = x;x = y;y = z;
}
int main()
{int a = 10;int b = 20;//写一个函数交换两个整型变量的值printf("交换前:a=%d b=%d\n",a, b);Swap1(a, b);printf("交换后:a=%d b=%d\n", a, b);return 0;
}

打印出来如图并没有交换两个数的值:
在这里插入图片描述
通过调试我们看到:a, b和x,y 所占用的内存地址不一样。交换x,y的值不影响 a,b的值。
所以这个代码并不能实现我们想要的效果。
在这里插入图片描述

  • 第二种使用指针实现
void Swap2(int* pa, int* pb)
{int z = 0;z = *pa;*pa = *pb;*pb = z;
}
int main()
{int a = 10;int b = 20;//写一个函数交换两个整型变量的值printf("交换前:a=%d b=%d\n", a, b);Swap2(&a, &b);printf("交换后:a=%d b=%d\n", a, b);return 0;
}

打印成功交换两个数的值
在这里插入图片描述
在这里插入图片描述

  • 实际参数(实参):真实传给函数的参数,叫实参。真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
  • 形式参数(形参):形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元) ,所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。

上面Swap1和Swap2函数中的参数x,y, px, py都是形式参数。在main函数中传给Swap1的a ,b和传给Swap2函数的&a , &b是实际参数

Swap1函数属于传值调用 在被调用的时候,实参传给形参,其实形参是实参的一份临时拷贝。改变形参不改变实参

Swap2函数属于传调用址 在被调用的时候由于传的是地址,形式参数的指针指向a,b的地址,通过指针变量就可以直接改变a,b的值。

  • 传值调用
    函数的形参和实参分别占用不同的内存块,对形参的修改不会影响实参,形参是实参的一份临时拷贝。改变形参不改变实参。
  • 传址调用
    传址调用是把函数外部创建的内存地址传递给函数参数的一种调用方式。
    这种传参方式可以让函数和函数外边的变量建立其起真正的联系,也就是函数内部可以直接操作函数外部的变量

三、函数的嵌套调用和链式访问

函数的嵌套调用:

void test2()
{printf("hehe\n");
}int test1()
{test2();return 0;
}int main()
{test1();return 0;
}
//运行函数打印“hehe”

函数的链式访问:
把一个函数的返回值作为另一个函数的参数

int main()
{int len = strlen("abc");printf("%d\n", len);//链式访问printf("%d\n",strlen("abc"));return 0;
}

下面看一个代码这是一个典型的链式访问:

printf("%d",printf("%d",printf("%d", 43)));

在这里插入图片描述
为什么会打印 4321 呢?
我们看一下函数 printf
int printf( const char *format [, argument]… );
返回值:Each of these functions returns the number of characters printed, or a negative value if an error occurs.(每个函数都返回打印的字符数,如果出现错误,则返回负值。)
在这里插入图片描述

四、函数的声名和定义

前面我所写的代码都没有声名,只有定义函数和调用函数。因为我写的函数定义在主函数之前可以不用声名。(代码从上往下执行)

函数声名

  • 告诉编译器有一个函数叫什么,参数是什么,返回类型是什,但是具体是不是存在,无关紧要。
  • 函数声名一般出现在函数的使用之前,要满足先声名后使用
  • 函数的声名一般要放在头文件中。

函数的定义:函数的定义是指函数的具体实现,交代函数的功能实现。

int main()
{int a = 10;int b = 20;//函数先声名一下 --> 告知int get_max(int, int); // int get_max(int x, int y);都可以//函数的调用int max = get_max(a, b);printf("%d\n", max);//打印20return 0;
}
int get_max(int x, int y)
{int z = 0;if (x > y)z = x;elsez = y;return z;//返回函数多的最大值

http://chatgpt.dhexx.cn/article/0ujmDQm3.shtml

相关文章

c语言函数定义的语法格式,C语言函数 -C语言函数定义的语法格式

C语言程序是由多个零件组合而成的,而函数就是最主要的组合零件。C语言程序的主体部分就是一个 main( ) 函数,它在 C语言程序中是必不可少的,每一个 C 程序都首先从 main( ) 函数开始执行。 C语言函数是什么 在前面的学习中,我们知…

c语言函数定义范围,c语言定义函数

函数是一段可以重复使用的代码,用来独立地完成某个功能,它可以接收用户传递的数据,也可以不接收。接收用户数据的函数在定义时要指明参数,不接收用户数据的不需要指明,根据这一点可以将函数分为有参函数和无参函数。 将…

C语言-函数(一):函数的定义和调用

函数是一个完成特定工作的独立程序模块,包括库函数和自定义函数两种。例如,scanf()、printf()等这些都为库函数,是由C语言系统提供定义,编程时直接调用即可;还有一种是自己定义的函数,我们主要介绍的就是这…

全网最细!软件测试—bug生命周期

测试人员最本质的工作就是寻找bug,提交bug、验证bug、推进bug的解决,直至软件达到发布的标准,提高软件的质量,及研发的工作效率和质量。 一、什么是bug 软件的BUG,狭义概念是指软件程序的漏洞或缺陷,广义概念除此之外还…

bug的生命周期你知道吗?一张图带你看懂它!

目录 1、什么是bug 2、bug的生命周期 3、如何描述一个bug 4、bug的级别 1、什么是bug 软件的bug狭义方面可以理解为是指软件程序的漏洞或缺陷,广义方面除找到程序漏洞之外,还包括测试工程师或用户所发现和提出的软件可改进的细节、或与需求文档存在差…

如何描述一个BUG以及BUG级别的定义、生命周期

目录 一、如何描述一个BUG? 二、BUG级别的定义 1.崩溃 2.严重 3.一般 4.次要 三、BUG的生命周期 一、如何描述一个BUG? 1.版本号(代码版本号) 2.测试环境/平台 不同的浏览器对同一个页面解析是不一样的: ①…

一个BUG(缺陷)的生命周期

缺陷状态 对于一个问题,其处理过程是一个周期,周期的不同阶段,其所处的状态也是不一样的。不同状态所对应的处理人也是不一样的。 打开 : 表示问题被提交等待有人处理。 重新指派 : 问题被重新指派给某人处理。 处理 …

bug生命周期bug跟踪处理

一、BUG BUG:软件的缺陷 1.BUG的定义:----与软件测试的目的对应 软件的BUG,狭义概念是指软件程序的漏洞或缺陷,广义概念除此之外还包括测试工程师或用户所发现和提出的软件可改进的细节、或与需求文档存在差异的功能实现等。 我们的职责就是&…

软件测试bug生命周期

测试人员最本质的工作就是寻找bug,提交bug、验证bug、推进bug的解决,直至软件达到发布的标准,提高软件的质量,及研发的工作效率和质量。 一、什么是bug 软件的BUG,狭义概念是指软件程序的漏洞或缺陷,广义概念除此之外…

简述Bug生命周期与Bug管理

Bug,即在测试过程中发现的问题,是测试工程师绩效最重要的考核之一,也是面试常被问到的知识领域。 今天,从Bug的生命周期入手,跟大家聊聊Bug管理。 Bug的生命周期如下所示,其中,新建、分配&…

(四)Bug的生命周期

Bug的属性 Bug重现环境 这个应该是我们重现bug的一个前提,如果没有这个前提,我们可能会无法重现问题,或者跟本就无从下手。 操作系统 这个是一般软件运行的一大前提,基本上所有的软件都依赖于操作系统之上的,对于一…

面试题之Bug的生命周期

今天来分享一个基础面试题:Bug的生命周期,虽然基础,但是面试被问到的概率很高。 Bug的生命周期,也就是一个Bug被发现到被关闭的过程,在整个生命周期中,不同的阶段对应不同的缺陷状态。 大家可以参考如下的…

测试之Bug与用例【创建Bug、Bug级别、Bug生命周期、测试用例的万能公式、设计测试用例具体方法】

文章目录 1. 如何创建Bug2. Bug的级别3. Bug的生命周期4. 面试题:跟开发产生争执怎么办5. 设计测试用例的万能公式使用万能公式对水杯设计测试用例 6. 设计测试用例的具体方法6.1 等价类6.2 边界类6.3 判定表6.4 正交法(allparis)6.5 场景设计法 1. 如何创建Bug 提…

Bug生命周期

过程描述: 1. 测试工程师开始执行测试,发现bug则新建bug,这时bug是新建状态。 2. 测试组负责人把bug修改为打开状态,表明开发人员可以修改该bug了。之所以会有打开这一步有两点目的:第一是测试组负责人对bug进行确认…

详解BUG(又名:BUG的生命周期)

测试人员最本质的工作就是寻找bug,提交bug、验证bug、推进bug的解决,直至软件达到发布的标准,提高软件的质量,及研发的工作效率和质量。 一、什么是bug 软件的BUG,狭义概念是指软件程序的漏洞或缺陷,广义概念除此之外…

Bug的生命周期状态流程图

bug的生命周期 BUG的生命周期,就是一个BUG被发现到这个BUG被关闭的过程。 生命周期中缺陷状态:新建-->指派-->已解决-->待验-->关闭 发现BUG-->提交BUG-->指派BUG-->研发确认BUG-->研发去修复BUG-->回归验证BUG-->是否通过…

BUG的生命周期,bug从“出生到死亡”全部过程

前言: 基本定义:BUG从发现到这个bug关闭,是一个完整的生命周期。 一:从具体状态上来讲 状态有这几种: 1:new-bug被第一次发现的时候,确认是一个问题,将bug进行记录。 2&#xff…

bug的生命周期都有那些阶段

bug的生命周期都有那些阶段 一、主要有八个生命周期阶段二、bug生命周期流程图 一、主要有八个生命周期阶段 1)New: 是新发现的bug(指给对应的开发);   2)Open: 开发确认这是bug,并…

测试基础-05-bug的定义生命周期

1 学习目标&内容 1.1 bug的类型 1.2 bug的等级 1.3 bug的生命周期 1.4 禅道的使用 2 bug的定义 软件的Bug:狭义概念是指软件程序的漏洞或缺陷,广义概念除此之外还包括测试工程师或用户所发现和剔除的软件可改进的细节或与需求文档存在差异的功…

bug的生命周期

bug的生命周期 测试人员的主要职责什么是bugbug的生命周期1、发现bug2、提交bug3、指派bug4、确认缺陷5、修复BUG6、回归验证BUG7、关闭缺陷 管理bug的工具首先是国内的bug管理软件:国外的bug管理软件有: 测试人员的主要职责 测试人员最本质的工作就是寻…