首页 > 编程语言 >C语言编程—函数的介绍

C语言编程—函数的介绍

时间:2023-05-25 22:33:58浏览次数:37  
标签:return 函数 int 编程 调用函数 C语言 参数 swap

函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。

函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。

C 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。

函数还有很多叫法,比如方法、子例程或程序,等等。

定义函数

C 语言中的函数定义的一般形式如下:

return_type function_name( parameter list )
{
   body of the function
}

在 C 语言中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

  • 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void
  • 函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
  • 参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
  • 函数主体:函数主体包含一组定义函数执行任务的语句。

以下是 max() 函数的源代码。该函数有两个参数 num1 和 num2,会返回这两个数中较大的那个数:

/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2) 
{
   /* 局部变量声明 */
   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 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。

当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。

调用函数时,传递所需参数,如果函数返回一个值,则可以存储返回值。例如:

#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;
   else
      result = num2;
 
   return result; 
}

把 max() 函数和 main() 函数放一块,编译源代码。当运行最后的可执行文件时,会产生下列结果:

Max value is : 200

函数参数

如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数

形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁。

当调用函数时,有两种向函数传递参数的方式:

C语言编程—函数的介绍_函数声明

默认情况下,C 使用传值调用来传递参数。一般来说,这意味着函数内的代码不能改变用于调用函数的实际参数。

函数参数传递常用的三种方式

示例程序均以交换两个整数为例。

1. 值传递

#include <stdio.h>

void swap(int x, int y);
void swap(int x, int y)
{
    int temp;
    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;
}

由于值传递是单向传递,传递过程中只是改变了形参的数值,并未改变实参的数值,因此并不会改变a和b原有的值。

2. 指针传递

#include <stdio.h>

void swap(int *x, int *y);
void swap(int *x, int *y)
{
    int temp;
    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;
}

指针传递过程中,将a和b的地址分别传递给了x和y,在函数体内部改变了a、b所在地址的值,即交换了a、b的数值。

3. 引用传递

#include <stdio.h>

void swap(int &x, int &y);
void swap(int &x, int &y)
{
    int temp;
    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;
}

引用传递中,在调用swap(a, b);时函数会用a、b分别代替x、y,即x、y分别引用了a、b变量,这样函数体中实际参与运算的其实就是实参a、b本身,因此也能达到交换数值的目的。

注:严格来说,C语言中是没有引用传递,这是C++中语言特性,因此在.c文件中使用引用传递会导致程序编译出错。

标签:return,函数,int,编程,调用函数,C语言,参数,swap
From: https://blog.51cto.com/u_15641375/6351569

相关文章

  • 如何在ubuntu下安装Vscode并且运行C语言文件或者python文件
    要想在ubuntu中编写并运行C语言或python文件,有两种方法,第一种是直接用vim编写(在我之前的文章中有详细介绍)可以点击如下链接:如何在ubuntu安装C语言环境-代师-博客园(cnblogs.com)如何在Ubuntu中编写Python代码并运行-代师-博客园(cnblogs.com) 今天我要说的是用专......
  • 初始C语言:从菜鸟变大牛(1)
    初识C语言:本篇是对C语言的初步认识,都是基础知识,内容不会过于深奥,通俗易懂,具体的细节知识会在后面发布。学好编程,不仅仅是学好C语言,还要学好计算机语言、算法数据结构、操作系统,计算机网络、项目实战、数据库。这些内容在后面我也会一一分享给大家,让我们一起进步。(注:如果文章内容......
  • T-SQL编程
    @@t-sql循环  T-SQL编程  一、T-SQL编程变量声明、为变量赋值、输出变量必须赋初值,不然为null,与null计算所得的结果还是null  二、T-SQL中的while循环,无for循环begin......end相当于C#编程中while循环的大括号  三、T-SQL中if....else....  四、......
  • JavaScript中的生成器函数(Generator Functions)
    简介:生成器函数(GeneratorFunctions)是JavaScript中的一种特殊类型函数,它允许开发者在函数内部产生多个值并逐步返回,与传统函数一次返回单个值的方式不同。本文将介绍生成器函数的特性、优缺点以及如何使用它们,并提供一些代码案例来说明其用法。特性:使用function\*关键字声明:生成......
  • C语言函数大全-- x 开头的函数(5)
    C语言函数大全本篇介绍C语言函数大全--x开头的函数1.xdrmem_create1.1函数说明函数声明函数功能voidxdrmem_create(XDR*xdrs,caddr_taddr,u_intsize,enumxdr_opop););用于创建一个内存XDR流,以便进行编码或解码操作参数:xdrs:指向XDR数据结......
  • 激活函数及其梯度
    激活函数及其梯度1959年科学家对青蛙神经元的机制进行了研究,发现神经元不是对所有的输入都响应,而是只有值大于某个阈值时才会响应,且输出的值是固定的。科学家借鉴这种机制发明了神经元模型。这个函数在z=0处是不连续的,没法求它的导数,无法使用梯度下降进行优化。为了解决这......
  • 常见LOSS函数之MSE
    MSE及其梯度MSE(meansquarederror均方差)pytorch实现方法一:autograd方法二:backwardcrossentropyloss......
  • 似然函数与损失函数
    似然函数与损失函数一、误差对于每个样本,真实值等于预测值与误差之和。每一个样本的误差,都是独立且同分布的,并且均服从高斯分布由于误差服从高斯分布,误差的概率分布可表示为P(e(i)),于是theta的概率分布也可表示出来,如下二、似然函数我们的目标是找出使预测值最接近真实......
  • C语言——简介
    C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序......
  • Ansible_Runner run函数代码详解
    需求背景:随着第一版远程执行发布使用paramiko模块进行远程调用脚本的稳定,开始着手第二版关于使用ansiblerunner执行远程发布任务paramiko和ansiblerunner各自的优缺点:Paramiko:Paramiko是一个Python的SSH库,用于在远程主机上执行命令。优点:直接通过SSH连接到远程主机,无需......