C 语言函数完全指南:创建、调用、参数传递、返回值解析

简介: 函数是一段代码块,只有在被调用时才会运行。您可以将数据(称为参数)传递给函数。函数用于执行某些操作,它们对于重用代码很重要:定义一次代码,并多次使用。

C 语言中的函数

函数是一段代码块,只有在被调用时才会运行。

您可以将数据(称为参数)传递给函数。

函数用于执行某些操作,它们对于重用代码很重要:定义一次代码,并多次使用。

预定义函数

事实证明,您已经知道什么是函数了

例如,main() 是一个函数,用于执行代码,printf() 也是一个函数,用于向屏幕输出/打印文本:

int main() {
   
  printf("Hello World!");
  return 0;
}

创建函数

要创建(通常称为声明)您自己的函数,请指定函数的名称,然后是括号 () 和花括号 {}

语法:

void myFunction() {
   
  // 要执行的代码
}

示例解释:

  • myFunction() 是函数的名称
  • void 意味着该函数没有返回值
  • 在函数内(主体),添加代码定义函数应该做什么

调用函数

声明的函数不会立即执行。它们被“保存以便以后使用”,并在被调用时执行。

要调用函数,请编写函数的名称,后跟两个括号 () 和分号 ;

在以下示例中,当调用 myFunction() 时,它用于打印文本(操作):

// 创建一个函数
void myFunction() {
   
  printf("我刚被执行了!");
}

int main() {
   
  myFunction(); // 调用函数
  return 0;
}

// 输出 "我刚被执行了!"

函数可以被多次调用:

void myFunction() {
   
  printf("我刚被执行了!");
}

int main() {
   
  myFunction();
  myFunction();
  myFunction();
  return 0;
}

// 我刚被执行了!
// 我刚被执行了!
// 我刚被执行了!

C 语言中的函数参数

参数和参数

可以通过参数将信息传递给函数。参数在函数中充当变量。

参数在函数名后,括号内指定。您可以添加任意数量的参数,只需用逗号分隔即可:

语法:

returnType functionName(parameter1, parameter2, parameter3) {
   
  // 要执行的代码
}

以下函数接受一个名为 name 的字符串参数。当调用该函数时,我们会传递一个名字,用于在函数内部打印 “Hello” 和每个人的名字。

void myFunction(char name[]) {
   
  printf("Hello %s\n", name);
}

int main() {
   
  myFunction("Liam");
  myFunction("Jenny");
  myFunction("Anja");
  return 0;
}

// Hello Liam
// Hello Jenny
// Hello Anja

当参数传递给函数时,它被称为参数。因此,在上面的示例中:name 是参数,而 Liam、JennyAnja 是参数。

多个参数

在函数内,您可以添加任意数量的参数:

void myFunction(char name[], int age) {
   
  printf("Hello %s. You are %d years old.\n", name, age);
}

int main() {
   
  myFunction("Liam", 3);
  myFunction("Jenny", 14);
  myFunction("Anja", 30);
  return 0;
}

// Hello Liam. You are 3 years old.
// Hello Jenny. You are 14 years old.
// Hello Anja. You are 30 years old.

请注意,当您使用多个参数时,函数调用必须具有与参数数目相同数量的参数,并且参数必须按相同顺序传递。

将数组作为函数参数传递

您还可以将数组传递给函数:

void myFunction(int myNumbers[5]) {
   
  for (int i = 0; i < 5; i++) {
   
    printf("%d\n", myNumbers[i]);
  }
}

int main() {
   
  int myNumbers[5] = {
   10, 20, 30, 40, 50};
  myFunction(myNumbers);
  return 0;
}

示例解释

函数 (myFunction) 以一个数组作为参数 (int myNumbers[5]),并使用 for 循环遍历数组元素。

当在 main 中调用函数时,我们会传递 myNumbers 数组,它会输出数组元素。

请注意,当您调用函数时,只需在将它作为参数传递时使用数组名称即可 (myFunction(myNumbers))。但是,在函数参数中需要完整的数组声明 (int myNumbers[5])。

返回值

以前的示例中使用的 void 关键字表示函数不应返回值。如果想要函数返回一个值,您可以使用数据类型(例如 intfloat 等)代替 void,并在函数内部使用 return 关键字:

int myFunction(int x) {
   
  return 5 + x;
}

int main() {
   
  printf("Result is: %d", myFunction(3));
  return 0;
}

// 输出 8 (5 + 3)

此示例返回具有两个参数的函数的总和:

int myFunction(int x, int y) {
   
  return x + y;
}

int main() {
   
  printf("Result is: %d", myFunction(5, 3));
  return 0;
}

// 输出 8 (5 + 3)

您还可以将结果存储在变量中:

int myFunction(int x, int y) {
   
  return x + y;
}

int main() {
   
  int result = myFunction(5, 3);
  printf("Result is = %d", result);
  return 0;
}

// 输出 8 (5 + 3)

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

相关文章
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
1117 14
|
存储 编译器 C语言
【C语言】数据类型全解析:编程效率提升的秘诀
在C语言中,合理选择和使用数据类型是编程的关键。通过深入理解基本数据类型和派生数据类型,掌握类型限定符和扩展技巧,可以编写出高效、稳定、可维护的代码。无论是在普通应用还是嵌入式系统中,数据类型的合理使用都能显著提升程序的性能和可靠性。
655 8
|
存储 算法 C语言
【C语言】深入浅出:C语言链表的全面解析
链表是一种重要的基础数据结构,适用于频繁的插入和删除操作。通过本篇详细讲解了单链表、双向链表和循环链表的概念和实现,以及各类常用操作的示例代码。掌握链表的使用对于理解更复杂的数据结构和算法具有重要意义。
3806 6
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
2371 5
|
C语言 开发者
【C语言】断言函数 -《深入解析C语言调试利器 !》
断言(assert)是一种调试工具,用于在程序运行时检查某些条件是否成立。如果条件不成立,断言会触发错误,并通常会终止程序的执行。断言有助于在开发和测试阶段捕捉逻辑错误。
401 5
|
安全 搜索推荐 Unix
【C语言】《回调函数》详细解析
回调函数是指一个通过函数指针调用的函数。它允许将一个函数作为参数传递给另一个函数,并在特定事件发生时执行。这种技术使得编程更加灵活,可以动态决定在何时调用哪个函数。
926 1
|
12月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1125 29
|
12月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
470 4
|
12月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

推荐镜像

更多
  • DNS