首页 > 其他分享 >逍遥自在学C语言 | 函数初级到高级解析

逍遥自在学C语言 | 函数初级到高级解析

时间:2023-06-28 23:59:20浏览次数:59  
标签:main return 函数 示例 逍遥自在 C语言 int num 解析

前言

函数是C语言中的基本构建块之一,它允许我们将代码组织成可重用、模块化的单元。

本文将逐步介绍C语言函数的基础概念、参数传递、返回值、递归以及内联函数和匿名函数。

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

  • 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

二、基础概念

  • 函数是一个独立的代码块,可以接收输入参数并执行特定任务。

  • 它可以用于执行特定的操作或计算,并可以返回一个值(可选)。

  • 以下是一个简单的示例:

#include <stdio.h>

// 声明函数
int addNumbers(int a, int b) {
  int sum = a + b;
  return sum;
}

int main() {
  // 调用函数
  int result = addNumbers(3, 4);
  printf("两数之和:%d\n", result);

  return 0;
}

  • 上述代码中,我们声明了一个名为addNumbers的函数,它接收两个整数参数并返回它们的和。

  • main函数中,我们调用了addNumbers函数,并将结果打印到控制台上。

  • 运行结果

两数之和:7

三、参数传递

  • 函数可以通过参数接收外部传入的数据。
  • 在C语言中,有两种参数传递的方式:按值传递和按引用传递。
  • 代码示例
#include <stdio.h>

// 按值传递
void incrementByValue(int num) {
  num += 1;
}

// 按引用传递
void incrementByReference(int* numPtr) {
  (*numPtr) += 1;
}

int main() {
  int num = 5;

  incrementByValue(num);
  printf("按值传递后的值:%d\n", num);

  incrementByReference(&num);
  printf("按引用传递后的值:%d\n", num);

  return 0;
}

  • 在上面的示例中,我们定义了两个函数incrementByValueincrementByReference

  • incrementByValue按值传递参数,即在函数内部对参数的修改不会影响到原始变量。

  • incrementByReference按引用传递参数,通过传递指针的方式,可以在函数内部修改原始变量的值。

  • 运行结果

按值传递后的值:5
按引用传递后的值:6

四、返回值

函数可以返回一个值,这使得我们可以从函数中获取计算结果或执行状态。

#include <stdio.h>

// 返回两个数中较大的数
int max(int a, int b) {
  if (a > b) {
    return a;
  } else {
    return b;
  }
}

int main() {
  int a = 3;
  int b = 4;

  int maxValue = max(a, b);
  printf("较大的数:%d\n", maxValue);

  return 0;
}

  • 在上述示例中,max函数接收两个整数参数并返回较大的数。

  • main函数中,我们调用max函数,并将结果打印到控制台上。

  • 运行结果

较大的数:4

五、递归函数

  • 递归是一种函数调用自身的技术。

  • 它在解决一些问题时非常有用,如计算阶乘、斐波那契数列等。

  • 代码示例

#include <stdio.h>

// 计算阶乘
int factorial(int n) {
  if (n == 0 || n == 1) {
    return 1;
  } else {
    return n * factorial(n - 1);
  }
}

int main() {
  int num = 5;
  int result = factorial(num);
  printf("%d的阶乘:%d\n", num, result);

  return 0;
}

  • 在上面的示例中,factorial函数使用递归的方式计算一个数的阶乘。

  • main函数中,我们调用factorial函数,并将结果打印到控制台上。

  • 运行结果

5的阶乘:120

六、内联函数

  • 内联函数是一种函数调用的优化方式,编译器会将函数的代码直接嵌入到调用该函数的地方,而不是通过函数调用的方式进行执行。

  • 内联函数的好处是可以减少函数调用的开销,提高程序的执行效率。

  • 使用内联函数可以通过在函数定义前加上关键字inline来标识。

  • 代码示例

#include <stdio.h>

// 内联函数
inline int square(int num) {
  return num * num;
}

int main() {
  int result = square(5);
  printf("平方:%d\n", result);

  return 0;
}

  • 在上述示例中,我们定义了一个内联函数square,它计算一个数的平方。

  • main函数中,我们调用square函数,并将结果打印到控制台上。

  • 运行结果

平方:25

七、匿名函数

  • C语言本身不直接支持匿名函数,但可以使用函数指针和函数指针结构体来模拟匿名函数的功能。
  • 代码示例
#include <stdio.h>

// 匿名函数模拟
typedef int (*Operation)(int, int);

int performOperation(int a, int b, Operation op) {
  return op(a, b);
}

int main() {
  Operation add = [](int a, int b) {
    return a + b;
  };

  int result = performOperation(3, 4, add);
  printf("结果:%d\n", result);

  return 0;
}

  • 在上述示例中,我们使用函数指针结构体Operation来模拟匿名函数。

  • 我们定义了一个匿名函数add,它实现了两个数的加法运算。然后,我们将add函数作为参数传递给performOperation函数,并打印结果到控制台上。

  • 运行结果

结果:7

小结

通过这篇文章,我们学会了

1、函数的概念,参数传递,函数返回值

2、递归函数

3、内联函数

4、匿名函数

标签:main,return,函数,示例,逍遥自在,C语言,int,num,解析
From: https://www.cnblogs.com/Wayne123/p/17512852.html

相关文章

  • fnt文件解析器
     用于解析BMFont软件生成的fnt文件 usingSystem;usingSystem.Collections.Generic;usingSystem.Text.RegularExpressions;usingUnityEngine;publicclassFntParse{publicstructKerning{publicintfirst;publicintsecond;......
  • Spring之Bean后处理器——InstantiationAwareBeanPostProcessor的使用与源码解析
    <divclass="operating"><aclass="href-article-editslide-toggle">版权</a></div></div></div></div><divid="blogHuaweiyunAdvert"></d......
  • 初始C语言(20)指针(2)
    一:野指针1:指针未初始化:#include<stdio.h>intmain(){ int*p;//局部变量未初始化,则被认为是随机值 *p=20; return0;}2:越界访问#include<stdio.h>intmain(){ intarr[10]={0}; int*p=arr; for(inti=0;i<=20;i++)//超出了arr的范围,称为野指针 {......
  • c语言精度升级
    #include<stdio.h>intmain(){chari=128;printf("%d",i+1);return0;} 结果:  10000000 --128 10000001  --补码+1精度升级11111111111111111111111110000001-补码11111111111111111111111110000000-补码-110000000000000000000000001111111-取......
  • java 解析csv
    opencsvjava读取csv的类库主要有两种,opencsv和javacsv,研究发现,javacsv最后一次更新是2014-12-10,很久不维护了。opencsv是apache的项目,并且至今仍在维护,所以决定使用opencsv。csvcsv文件,全名commaseparatedvalues,默认以逗号分隔,是纯文本文件。虽然用excel打开后格式排版了,但是那......
  • 【Flutter专题】Android Flutter入门笔记、技术解析与项目实战
    Flutter是一个跨平台、高性能的移动UI框架,其采用Dart语言开发,并使用自己的渲染引擎来绘制UI,保证了自身的高性能,保证了在Android和iOS上UI的一致性。目前Flutter已经支持iOS、Android、Web、Windows、macOS、Linux、Fuchsia(Google新的自研操作系统)等众多平台。与其他跨平......
  • C语言中的数据加密和解密技术
    C语言中的数据加密和解密技术数据加密是计算机安全领域中非常重要的一项技术,它可以将敏感的数据转化为一种无法理解或解读的形式,以保护数据的机密性和完整性。在C语言中,我们可以使用各种算法和技术来实现数据的加密和解密操作。本文将介绍在C语言中进行数据加密和解密的基本概念和......
  • C语言中的图形编程:绘图和图形界面
    C语言中的图形编程:绘图和图形界面图形编程是计算机科学领域中一个重要的方向,它涉及到在计算机屏幕上创建图形和图像的技术。在C语言中,我们可以使用不同的库和工具来进行图形编程,实现各种各样的绘图和图形界面。本文将介绍在C语言中进行图形编程的基本概念和常用库,以及展示一些实例......
  • 如何解析和读取mysql binlog
    要解析和读取MySQL的二进制日志(binlog),可以使用一些工具和方法。MySQL官方提供的工具:MySQL自带了一个名为mysqlbinlog的命令行工具,可以用于解析和读取二进制日志。通过执行以下命令,您可以查看二进制日志的内容:mysqlbinlog[options][binlog_files]options是......
  • C语言snprintf追加拼接字符串
    原文地址:https://www.cnblogs.com/liqinglucky/p/snprintf.html在使用log函数打印时想打印整个结构体的值出来,但是结构体比较大,如果用log函数一行一行打印显示效果不好。就想用snprintf追加拼接字符串到一个buffer里,最后再把整个buffer打印出来。这样可以方便的调整buffer里的内......