C语言——函数定义及用法【内部函数外部函数内联函数】
目录:
一:定义
二:函数的一般形式
组成部分
1.返回类型
2.函数名称
注意:
3.参数
4.函数主体
实例:
三:函数声明
补充:
四:调用函数
实例:
五:函数参数
六:内部函数&外部函数&内联函数
1.内部函数
定义:
2.外部函数
定义:
3.内联函数
定义:
注意:
七:main 函数的参数
1. main 函数带参数 :
2.main函数没有参数:
3.argc 和 argv
4.如何传递给main函数的argc和argv的呢?
八:函数参数传递都是值传递
为什么?
实例:
一:定义
函数是一组一起执行一个任务的语句
每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数
函数声明告诉编译器函数的名称、返回类型和参数
函数定义提供了函数的实际主体
二:函数的一般形式
return_type function_name( parameter list )
{body of the function
}
组成部分
1.返回类型
- 返回类型:一个函数可以返回一个值
- return_type 是函数返回的值的数据类型
- 有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void
2.函数名称
- 函数名称:这是函数的实际名称
- 函数名和参数列表一起构成了函数签名
注意:
函数名和参数列表一起构成了函数签名
意味着可以出现参数列表不同但是函数名相同的函数。
void print()
{printf("hello world!");
}void print(int nums)
{printf("%d\n",a);
}
这是合法的!!!
3.参数
- 参数:参数就像是占位符
- 当函数被调用时,您向参数传递一个值,这个值被称为实际参数
- 参数列表包括函数参数的类型、顺序、数量
- 参数是可选的,也就是说,函数可能不包含参数
4.函数主体
- 函数主体:函数主体包含一组定义函数执行任务的语句
实例:
/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2)
{/* 局部变量声明 */int result;if (num1 > num2)result = num1;elseresult = num2;return result;
}
该函数有两个参数 num1 和 num2,会返回这两个数中较大的那个数
三:函数声明
return_type function_name( parameter list );
补充:
在函数声明中,参数的名称并不重要,只有参数的类型是必需的
int max(int num1, int num2);等价于
int max(int, int);
四:调用函数
当程序调用函数时,程序控制权会转移给被调用的函数
实例:
#include <stdio.h>/* 函数声明 */
int max(int num1, int num2);int main ()
{/* 局部变量定义 */int a = 100;int b = 200;int ret;/* 调用函数来获取最大值 */ret = max(a, b);printf( "Max value is : %d\n", ret );return 0;
}/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2)
{/* 局部变量声明 */int result;if (num1 > num2)result = num1;elseresult = num2;return result;
}
运行结果:
Max value is : 200
由于程序是从上向下执行,所以函数要先声明,后调用
由于程序是从上向下执行,所以函数要先声明,后调用
五:函数参数
调用类型 | 描述 |
---|---|
传值调用 | 该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。 |
引用调用 | 通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。 |
六:内部函数&外部函数&内联函数
根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数
内部函数又称静态函数
可以使函数的作用域只局限于所在文件
1.内部函数
定义:
如果一个函数只能被本文件中其他函数所调用,它称为内部函数
在定义内部函数时,在函数名和函数类型的前面加 static
static 类型名 函数名 (形参表)
2.外部函数
定义:
如果在定义函数时,在函数的首部的最左端加关键字 extern,则此函数是外部函数,可供其它文件调用
extern int max (int a,int b)
注意:如果在定义函数时省略 extern,则默认为外部函数
3.内联函数
定义:
内联函数是指用inline关键字修饰的函数
在类内定义的函数被默认成内联函数
内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质
内联扩展是用来消除函数调用时的时间开销
通常用于频繁执行的函数,对于小内存空间的函数非常受益
注意:
- 递归函数不能定义为内联函数
- 内联函数一般适合于不存在while和switch等复杂的结构且只有1~5条语句的小函数上,否则编译系统将该函数视为普通函数
- 内联函数只能先定义后使用,否则编译系统也会把它认为是普通函数
- 对内联函数不能进行异常的接口声明
七:main 函数的参数
main 函数其实与我们写的函数没有什么区别,它也会有自己的参数
1. main 函数带参数 :
int main( int argc, char *argv[] )
2.main函数没有参数:
int main()
3.argc 和 argv
argc 和 argv 是 main 函数的形式参数
这两个形式参数的类型是系统规定的
变量名称argc和argv是常规的名称,当然也可以换成其他名称
main 的两个参数的参数名如下:
int main( int argc, char *argv[] )
以写成下面这样:
int main( int test_argc, char *test_argv[] )
argc 是指传入参数的个数
argv[] 是一个指针数组,指向传递给程序的每个参数
4.如何传递给main函数的argc和argv的呢?
C程序在编译和链接后,都生成一个exe文件,执行该exe文件时,可以直接执行
也可以在命令行下带参数执行,命令行执行的形式为:
可执行文件名称 参数1 参数2 ... ... 参数n
可执行文件名称和参数、参数之间均使用空格隔开
命令行字符串将作为实际参数传递给main函数:
- (1) 可执行文件名称和所有参数的个数之和传递给 argc
- (2) 可执行文件名称(包括路径名称)作为一个字符串,首地址被赋给 argv[0],参数1也作为一个字符串,首地址被赋给 argv[1],... ...依次类推
八:函数参数传递都是值传递
本质上说,C 里面所有的函数参数传递,都是值传递
为什么?
因为指针传递之所以能改变传递参数变量的值,是因为 swap 函数交换的不是传递进来的指针本身,而是指针指向的值
实例:
void swap(int *x, int *y);
void swap(int *x, int *y){int temp;//这里操作的是指针指向的值 而不是指针temp = *x;*x = *y;*y = temp;
// 倘若直接交换指针 a、b的值不会交换
// temp = x;
// x = y;
// y = temp;
}int main( int argc, char *argv[] )
{int a = 5;int b = 10;swap(a, b); //调用交换函数printf("交换结果为 a = %d, b = %d\n",a,b);return 0;
}
C语言——函数定义及用法【内部函数外部函数内联函数】相关推荐
- C++中宏的定义与用法(现已被内联函数所代替)
在noip中,宏还是被经常采用,所以这里讲一下,C++中宏的定义与用法 第一种用法--配合条件编译:#define DEBUG 定义一个叫DEBUG的标识符.它应该与#ifdef或#ifndef配合使 ...
- 函数重载、引用再探、内联函数
文章目录 函数重载 为什么C++支持重载,C语言不支持呢? extern "C" 引用再探 引用的特性 引用的使用场景 引用和指针 引用和指针的不同点: 内联函数 什么是内联函数? ...
- c++入门 有关《c++关键字》 《命名空间》《缺省参数》《函数重载》《引用》《内联函数》《outo关键字》
1.C++关键字(c++98) C++总共63个关键字,c语言一共32个关键字. 下面我列 举出c++的关键字: 2.命名空间 在c/c++中,变量,函数和后面要学到的类都是大量存在的,这些变量,函数 ...
- 【内联函数】inline关键字的作用与内联函数的特性
学习导航 一.内联函数产生的意义 二.内联函数的使用 三.内联函数的作用 ①简单易懂 ②支持调试 ③支持类型检查 四.内联函数的特性 一.内联函数产生的意义 在C语言中,如果我们频繁调用某些函数,并 ...
- 内联函数与宏函数的区别
内联函数 概念 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率 特性 inline是一种以空间换时间的做法,省去调用 ...
- c语言内联函数加static,Static和内联函数
1.在C语言中,关键字Static有三个明显的作用: --- 在函数体内,一个被声明为静态的变量在这一函数被调用结束后不释放其存储空间.定义为static的局部变量存储在全局区(静态区),而一般的局部 ...
- C语言中内联函数的作用 inline
C语言中内联函数的作用 inline C语言中内联函数到底有什么作用? 试想一下,每当我们在假设就在主函数中调用另外一个函数的时候,那么这个函数就要入栈或者出栈,比如说下面的一个例子: 点击(此处)折 ...
- c语言inline不起作用,C语言inline内联函数学习小结
//inline(内联)函数:将普通的函数定义为inline函数,可以避免普通函数入栈出栈的开销,它是将函数内的代码直接粘贴到调用处.除此之外,它和普通函数无异. //要成为inline函数必须具备以 ...
- 【嵌入式】C语言高级编程-内联函数(10)
00. 目录 文章目录 00. 目录 01. 属性声明 02. 内联函数概述 03. 内联函数与宏 04. 编译器对内联函数的处理 05. static修饰内联函数 06. 附录 01. 属性声明 a ...
- 高质量程序设计指南c++/c语言(25)--类与内联函数
我们可以用inline来定义内联函数,不过,任何在类的说明部分定义(不是声明)的函数都会被自动的认为是内联函数. 内联函数必须是和函数体声明在一起,才有效.像这样的声明inline Tablefunc ...
最新文章
- Jetson Xavier(Ubuntu18.04)安装固态硬盘并挂载到/home区下
- MySQL 5.7的新特性(新功能)
- JDK5的一些新特性
- python字符串索引必须是整数_TypeError:在Python中,字符串索引必须是整数
- 和我一起来分析某药品仓储管理系统 卡死现象
- error: ‘XXX‘ is defined but never used (no-unused-vars)报错的解决方案
- MSSQL系列之十五 全文索引
- python执行request请求
- [Android]Webview中JS接口调用Java-版本问题
- c++ auto 属性
- iPad2如何从iOS6降级到5.1.1
- rls自适应滤波器matlab实现,rls算法的自适应滤波器matlab仿真作业.doc
- 重启计算机可以使用什么组合键,死机重启电脑快捷键有哪些
- 安卓listview下拉刷新_iPhone上被吹爆的良心App,安卓手机终于能用上了
- itween的抛物线线性移动
- 算法系列讲解之:社交网络之共同好友模型讲解
- 如何快速的下载百度网盘的文件
- 环保设备公司网络推广的方法
- 2023年江苏省赛事网络空间安全理论题库
- 达内python培训课程
热门文章
- “老赖”罗永浩:“首席忽悠官”,发布黑科技鲨纹技术
- 520男生送什么礼物好、实用小礼物合集
- VMware虚拟机磁盘文件vmdk单文件转多文件相互转换
- win版石器和linux,石器时代私服架设教程Linux版
- 移动硬盘在电脑上显示为本地磁盘并且出现打不开的情况
- 有哪些好用的渲染软件?12个业内顶级渲染软件推荐
- java openoffic linux_windows/linux服务器上java使用openoffice将word文档转换为PDF(亲测可用)...
- vue-router使用
- 张孝祥正在整理Java就业面试题大全
- 科学网—世界上最神奇的30个经典定律——读书笔记 - 贾琳的博文 http://blog.sciencenet.cn/blog-455749-859616.html