广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >详解C语言之函数
  • 891
分享到

详解C语言之函数

2024-04-02 19:04:59 891人浏览 安东尼
摘要

目录函数的调用函数调用方式函数嵌套调用递归调用内部函数与外部函数内部函数外部函数局部变量与全局变量局部变量全局变量总结函数的调用 函数调用方式 函数语句调用 函数表

函数的调用

函数调用方式

  • 函数语句调用
  • 函数表达式调用
  • 函数参数调用

sum(); //函数语句调用

result = average * sum(a); //函数表达式调用

此时函数名出现在表达式中,其返回值将作为表达式的算数参与计算。

result = sum(sum1(a)); //函数参数调用

此时函数名出现在另一个函数的参数中,其返回值将作为实参赋值给外函数的形参。

函数嵌套调用

首先在C语言中不允许函数嵌套定义,也就是不许在一个函数内定义一个新函数。

但是C语言允许函数嵌套调用。


void a()
{
        printf("sth");
}
void b()
{
        printf("sth2");
        a();
}

递归调用

C语言的函数都支持递归,也就是说,每个函数都可以直接或间接地调用自己。

递归实现的原因是函数的每个执行过程在栈中都有自己的形参和局部变量的副本,这些副本相对独立。

假定某个函数调用了一个被调用的函数,再假定被调用的函数反过来调用了调用函数,那么第二个函数就称为调用函数的递归。

使用函数的递归需要两个先决条件,即递推关系和结束条件。

写个简单的函数递归:


#include<stdio.h>
void number(int a)
{
	int num = a;
	printf("输入一个正数:");
	scanf("%d",&num);
	if(num <= 0)
	{
		number(num);
	}
	else
	{
		printf("这个正数是:%d",num);
	}
} 
int main()
{
	int a; 
	number(a);
	return 0;
}

内部函数与外部函数

函数是C语言程序中的最小实现单位,我们可以把一个函数或者多个函数保存为一个文件,这个文件被称为源文件。

我们在定义一个函数后,该函数便可被其他函数所调用。

但当一个源程序由多个源文件组成时,我们可以指定函数不能被其他文件调用,这时C语言的函数便分为两大类,内部函数与外部函数。

内部函数

当某一个函数只能被其所在源文件调用时,他便被称为内部函数,也叫做静态函数。

当一个函数是内部函数时,他便只局限与其所在源文件中,其他源文件就可以有同名函数,并且他们之间互不干扰。

static关键字可以将原来的函数修饰成普通函数。

static 返回值类型 函数名(参数列表)

static int number(int a)

外部函数

与内部函数相反,外部函数是可以被其他源文件调用的。

外部函数使用extern关键字进行修饰。

一般来说,定义函数时如果没有使用extern关键字,则将默认该函数为默认函数,换言之,extern可以省略。

extern 返回值类型 函数名(参数列表)

extern in number(int a)

局部变量与全局变量

“作用域”:他决定了程序中哪些语句可用哪些不可用,换言之,就是程序的可见性。作用域包括局部作用域和全局作用域。

局部变量具有局部作用域,全局变量具有全局作用域。

局部变量

在一个函数内定义的变量称为局部变量,我们使用的大多数变量都是局部变量,这些变量的声明在函数内部,无法被其他函数使用。

函数的形式参数也属于局部变量,只作用于函数内的所有语句块。

一般来说,一个局部变量的作用域可以由包含该变量的一对大括号所决定。

全局变量

与局部变量相对,在函数外部进行声明定义的变量,称为全局变量。

全局变量不属于某一个函数,而属于整个源文件。如果要在其他文件中使用该变量,则需先用extern关键字进行引用修饰。

全局变量的作用是增加函数间数据联系的通道。如果在一个函数中改变了全局变量的值,就能影响到其他函数,这便打通了不同函数之间的通道。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: 详解C语言之函数

本文链接: https://www.lsjlt.com/news/157110.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解C语言之函数
    目录函数的调用函数调用方式函数嵌套调用递归调用内部函数与外部函数内部函数外部函数局部变量与全局变量局部变量全局变量总结函数的调用 函数调用方式 函数语句调用 函数表...
    99+
    2022-11-12
  • C语言之qsort函数详解
    目录一.qsort函数原型二.qsort常见的几种比较函数1.int类型的排序2.double类型的排序3.char类型的排序4.字符串的排序:1.按首字母排序2.按字符串长度排序:...
    99+
    2022-11-12
  • 详解C语言初阶之函数
    目录 1.main函数2.自定义函数2.1  函数的的封装和面向过程的思维3.函数的组成3.1函数的命名法3.2函数的返回值3.2.1void类型补充:3.3形参...
    99+
    2022-11-12
  • C语言时间函数之strftime()详解
    strftime函数主要用于时间格式化,它的函数原型如下: size_t __cdecl strftime(char * __restrict__ _Buf,size_t _Size...
    99+
    2022-11-13
  • C语言之system函数案例详解
    来看看在windows操作系统下system () 函数详解(主要是在C语言中的应用) 注意:在windows下的system函数中命令可以不区别大小写! 函数名: system...
    99+
    2022-11-12
  • C语言之strtol函数用法详解
    strtol 函数用法 strtol是一个C语言函数,作用就是将一个字符串转换为长整型long,其函数原型为: long int strtol (const char* str,...
    99+
    2022-11-12
  • C语言lseek()函数详解
     头文件: #include <sys/types.h> #include <unistd.h> 函数原型: off_t lseek(in...
    99+
    2022-11-12
  • C语言memset函数详解
    目录一、memset函数原型:二、使用memset函数三、给int类型赋值为1四、扒开内存五、memset给变量赋值总结在c语言中,使用变量前,需要先对变量的值进行初始化。数组在内存...
    99+
    2022-11-12
  • C语言时间函数之mktime和difftime详解
    目录mktime函数difftime函数总结这两个函数原型如下: __CRT_INLINE time_t __cdecl mktime(struct tm *_Tm); __CR...
    99+
    2022-11-13
  • C语言文件操作之fread函数详解
    目录前言一、fread 函数二、缓冲区受限的情况 ( 循环读取文件 | feof 函数判定文件读取完毕 )三、处理乱码问题四、记录读取的字节个数五、读取到 0 字节的情况六、读取完毕...
    99+
    2022-11-13
  • C语言中scanf函数详解
    scanf函数是C语言中用于从标准输入流中读取数据的函数。它的原型如下:```cint scanf(const char *form...
    99+
    2023-09-13
    C语言
  • C语言函数指针详解
    目录Introduction函数指针 Function PointersExercise 1:qsort中的函数指针Exercise 2:总结Introduction 上一个lab的...
    99+
    2022-11-12
  • C语言函数栈帧详解
    目录前言一.函数栈帧是什么?二、栈帧准备知识1.内存分区2.什么是栈?三、详解栈帧创建与销毁全过程调用函数之前:将传入函数的值放入栈中函数执行:1.保护当前ebp2.创建所需调用函数...
    99+
    2022-11-12
  • C语言strcpy库函数详解
    目录C语言strcpy库函数的讲解附1:MSDN关于strcpy库函数的简介思路:总结 C语言strcpy库函数的讲解 附1:MSDN关于strcpy库函数的简介 思路: 1.从上...
    99+
    2022-11-12
  • C 语言回调函数详解
    回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。1. 什么是回调函数?...
    99+
    2023-06-03
  • C语言进阶教程之函数指针详解
    目录一、函数指针1.概念1.2函数指针的使用方法1.3练习巩固1.4小结一下二、阅读两段有趣的代码1.( *(void( *)( ))0 )( )2.void (* signal(i...
    99+
    2022-11-13
  • C语言之包含min函数的栈实例详解
    目录一、题目描述二、思路分析三、整体代码总结一、题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时...
    99+
    2022-11-13
  • C语言的递归函数详解
    目录函数递归什么是递归?递归的俩个必要条件代码引例1栈溢出(Stack Overflow)合理使用递归代码引例3代码引例4解释要合理使用递归总结函数递归 程序调用自身的编程技巧称为递...
    99+
    2022-11-12
  • C语言strtod()函数案例详解
    前言 网上有很多关于strtod()函数的文章,不过大部分都是用strtod()函数转换一个字符 char *str = "111.11"; char *target; doub...
    99+
    2022-11-12
  • 关于C语言qsort函数详解
    目录C语言qsort函数详解一.qsort函数是什么 二.使用qsort排序-以升序为例1.整形数组排序2.字符数组排序3.字符指针数组排序4.结构体数组排序5.浮点型数组...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作