上一节: C语言 循环
上一节
下一节: C语言 作用域
下一节
C语言 函数
函数
函数是一起执行任务的一组语句。每个C程序至少都有一个函数main(),所有最简单的程序都可以定义其他函数。您可以将代码分成单独的函数。如何在不同功能之间划分代码取决于您,但是从逻辑上来说,这种划分使得每个功能都可以执行特定任务。函数声明将函数的名称,返回类型和参数告知编译器。函数定义提供函数的实际主体。C标准库提供了程序可以调用的许多内置函数。例如,strcat()可以连接两个字符串,memcpy()可以将一个内存位置复制到另一位置,还有更多函数。函数也可以称为方法或子例程或过程等。
定义函数
用C编程语言编写的函数定义的一般形式如下-
语法:
return_type function_name( parameter list ) {
body of the function
}
C语言中的函数定义由函数头和函数体组成。这是函数的所有部分-:
return_type - 函数可以返回一个值。 return_type是值的函数返回的数据类型。某些函数执行所需的操作而不返回值。在这种情况下,return_type是关键字void。
function_name - 这是函数的实际名称。函数名称和参数列表共同构成函数签名。
parameter list - 参数就像一个占位符。调用函数时,将一个值传递给参数。此值称为实际参数或自变量。参数列表是指函数参数的类型,顺序和数量。参数是可选的;也就是说,一个函数可能不包含任何参数。
body of the function - 函数体包含用于定义函数功能的语句的集合。
范例:
下面给出的是名为max() 的函数的源代码。此函数采用两个参数num1和num2,并返回两个之间的最大值 -
/* 函数返回两个数字之间的最大值 */
int max(int num1, int num2) {
/* local variable declaration */
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
函数声明
函数声明告诉编译器函数名称以及如何调用函数。该函数的实际主体可以单独定义。函数声明包含以下部分-
语法:
return_type function_name( parameter list );
对于上面定义的函数max(),函数声明如下-
int max(int num1, int num2);
参数名称在函数声明中并不重要,仅它们的类型是必需的,因此以下也是有效的声明-
int max(int, int);
在一个源文件中定义一个函数并在另一个文件中调用该函数时,需要函数声明。在这种情况下,应在调用函数的文件顶部声明该函数。
调用函数
创建C函数时,您需要定义函数的功能。要使用功能,您将必须调用该功能来执行定义的任务。当程序调用函数时,程序控制将转移到被调用函数。被调用函数执行已定义的任务,并且在执行其return语句或达到其函数结尾的右括号时,它将程序控制权返回给主程序。要调用一个函数,您只需要传递所需的参数以及函数名,如果函数返回一个值,则可以存储返回的值。例如
#include
/* 函数声明 */
int max(int num1, int num2);
int main () {
/* local variable definition */
int a = 100;
int b = 200;
int ret;
/* calling a function to get max value */
ret = max(a, b);
printf( "Max value is : %d\n", ret );
return 0;
}
/* 函数返回两个数字之间的最大值 */
int max(int num1, int num2) {
/* local variable declaration */
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
尝试一下
函数参数
如果函数要使用参数,则它必须声明接受参数值的变量。这些变量称为函数的形式参数(形参)。形式参数的行为类似于函数内部的其他局部变量,并在进入函数时创建并在退出时销毁。
调用函数时,可以通过两种方式将参数传递给函数-
按值调用 - 此方法将参数的实际值复制到函数的形式参数中。在这种情况下,对函数内部参数的更改不会对参数产生影响。
按引用调用 - 此方法将参数的地址复制到形式参数中。在函数内部,该地址用于访问调用中使用的实际参数。这意味着对参数所做的更改会影响参数。
按值传递
默认情况下,C编程使用按值调用来传递参数。通常,这意味着函数中的代码无法更改用于调用函数的参数。考虑如下的函数swap()定义。
/* function definition to swap the values */
void swap(int x, int y) {
int temp;
temp = x; /* save the value of x */
x = y; /* put y into x */
y = temp; /* put temp into y */
return;
}
现在,让我们通过传递实际值来调用函数swap(),如以下示例所示:
#include
/* function declaration */
void swap(int x, int y);
int main () {
/* local variable definition */
int a = 100;
int b = 200;
printf("Before swap, value of a : %d\n", a );
printf("Before swap, value of b : %d\n", b );
/* calling a function to swap the values */
swap(a, b);
printf("After swap, value of a : %d\n", a );
printf("After swap, value of b : %d\n", b );
return 0;
}
尝试一下
按引用传递
要通过引用传递值,参数指针会像其他任何值一样传递给函数。因此,相应地,您需要像下面的函数swap()一样将函数参数声明为指针类型,该函数通过其参数交换所指向的两个整数变量的值。
/* function definition to swap the values */
void swap(int *x, int *y) {
int temp;
temp = *x; /* save the value at address x */
*x = *y; /* put y into x */
*y = temp; /* put temp into y */
return;
}
现在让我们通过传递引用值来调用swap()函数,如以下示例所示:
#include
/* function declaration */
void swap(int *x, int *y);
int main () {
/* local variable definition */
int a = 100;
int b = 200;
printf("Before swap, value of a : %d\n", a );
printf("Before swap, value of b : %d\n", b );
/* calling a function to swap the values.
* &a indicates pointer to a ie. address of variable a and
* &b indicates pointer to b ie. address of variable b.
*/
swap(&a, &b);
printf("After swap, value of a : %d\n", a );
printf("After swap, value of b : %d\n", b );
return 0;
}
尝试一下
上一节: C语言 循环
上一节
下一节: C语言 作用域
下一节
查看笔记 分享笔记
笔记内容:
称呼:
Email:
站点:
分享笔记 重置
分类导航
前端
Ajax 教程
Angular 教程
Aurelia 教程
Bootstrap 教程
ChartJS 教程
CSS 教程
ES6 教程
FontAwesome 教程
HTML 教程
HTML 字符集 教程
HTML 游戏 教程
JavaScript 教程
jQuery 教程
Less 教程
React 教程
Sass 教程
Stylus 教程
TypeScript 教程
Unity 教程
Vue.js 教程
WebAssembly 教程
XAML 教程
颜色 教程
服务端
C# 教程
C++ 教程
COBOL 教程
C语言 教程
Fortran 教程
Go 教程
Groovy 教程
Java 教程
JSP 教程
JVM 教程
Kotlin 教程
Lisp 教程
Lua 教程
Node.js 教程
Pascal 教程
Perl 教程
PHP 教程
Python 教程
Python 3 教程
Ruby 教程
Rust 教程
Scala 教程
Spring 教程
Spring Boot 教程
Spring Cloud 教程
VB.Net 教程
移动端
Android 教程
IOS 教程
Objective-C 教程
React Native 教程
Swift 教程
小程序 教程
数据库
Access 教程
DB2 教程
Mariadb 教程
Memcached 教程
MongoDB 教程
MySQL 教程
Neo4j 教程
PL/SQL 教程
PostgreSQL 教程
Redis 教程
SQL 教程
SQL Server 教程
SQLite 教程
T-SQL 教程
数据格式
Jackson 教程
JSON 教程
SVG 教程
XML 教程
开发工具
ActiveMQ 教程
Ant 教程
Apache HttpClient 教程
Apache POI PPT 教程
AWS 教程
Docker 教程
ElasticSearch 教程
ExpressJS 教程
GIT 教程
GitLab 教程
Google Maps 教程
Gradle 教程
Java NIO 教程
JavaFX 教程
JavaMail 教程
JDBC 教程
jMeter 教程
JPA 教程
jsoup 教程
Junit 教程
KoaJS 教程
Kubernetes 教程
Log4j 教程
Logstash 教程
Lucene 教程
Makefile 教程
Maven 教程
RESTful 教程
Sed 教程
SEO 教程
Servlet 教程
SLF4J 教程
Socket.IO 教程
Struts 教程
SVN 教程
TestNG 教程
UML 教程
UNIX / LINUX 教程
WebSocket 教程
WPF 教程
xStream 教程
区块链 教程
数据处理
Flink 教程
Flume 教程
Hadoop 教程
Hbase 教程
Hive 教程
Kafka 教程
Kibana 教程
MapReduce 教程
MATLAB 教程
MyBatis 教程
Pig 教程
R语言 教程
Solr 教程
Spark 教程
Storm 教程
Zookeeper 教程
大数据分析 教程
数据仓库 教程
数据挖掘 教程
计算机基础
HTTP 教程
IPv4 教程
IPv6 教程
Ubantu 教程
WebServices 教程
嵌入式系统 教程
操作系统 教程
数据结构和算法 教程
汇编语言 教程
物联网 教程
电子电路基础 教程
编译器设计 教程
网站开发 教程
计算机 教程
计算机基础 教程
计算机网络 教程
设计模式 教程
AI
CNTK 教程
Keras 教程
PyTorch 教程
TensorFlow 教程
人工智能 教程
机器学习 教程
Python 技术
Django 教程
Flask 教程
NumPy 教程
Pandas 教程
Pillow 教程
PyGTK 教程
PyQt5 教程
PySpark 教程
pytest 教程
Python -数据科学 教程
Python MySQL 教程
Python 取证 教程
Python 数据结构 教程
Python 文本处理 教程
Python 网络编程 教程
Python 网页抓取 教程
Python 设计模式 教程
RxPY 教程
SciPy 教程
Seaborn 教程
SymPy 教程
wxPython 教程
框架
Laravel 教程
Web 图标Icon 教程
Web2py 教程
WebGL 教程
WebRTC 教程
WordPress 教程
Yii 教程
Zend Framework 教程
SAP
Crystal Reports 教程