C语言 函数

C语言 函数

上一节: 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 教程

相关拼贴

365bet足球正网平台 狗狗眼睛瞎了怎么办,如何帮助它重拾生活的乐趣
365bet备用服务器 漢字「彌」:基本資料

漢字「彌」:基本資料

📅 09-08 👀 5815
365bet备用服务器 dnf深渊补丁怎么弄(DNF补丁教程)