Skip to content

C 语言入门(六)

前言

欢迎,欢迎,今天迎来的是 “函数” 大神😇

六、函数简介

6.1 函数声明

类似于数学中的 “函数”,有输入,输出和对应法则🧐

函数是一段可以重复执行的代码。它可以接受参数,完成对应的操作。

c
int plus(int a,int b) {
  return a + b;
}

// 函数的调用(函数必须声明后使用,否则会报错)
int a = plus_one(34);

函数的声明

  1. int:返回值类型,函数声明前需要给出返回值的类型。

  2. plus:自定义函数名,遵循命名规范。

  3. int a:声明参数的类型和参数名,可以有多个参数。

  4. return:给出函数的返回值后,就会结束函数的调用。如果函数没有返回值,可以省略return语句,或者写成return;

viod 关键字

常用在函数语句哦😮

void 关键字C语言中,主要用于表示“无类型”或“无返回值”。

c
void myFunc(void) {
  // ...
}

扩展

递归

可以想象你前后都有一面镜子,看向其中一面,你就会发现镜中无限“递归”🧐

递归指的是在函数的定义中使用函数自身的方法。

c
// 斐波那契数列
unsigned long Fibonacci(unsigned n) {
  if (n > 2)
    return Fibonacci(n - 1) + Fibonacci(n - 2);
  else
    return 1;
}

6.2 函数的参数

c
int plus(int a,int b) {
  return a + b;
}

// 函数的调用(函数必须声明后使用,否则会报错)
int a = plus_one(34);
  • 形参:形参是函数定义时的参数,它们在函数体内用作占位符。其作用是接收调用函数时传入的实际参数。例如 a
  • 实参:实参是函数调用时传递给函数的具体值或变量。实参的值会被传递给形参。例如 3

参数传递方式

水了,水了😋

c
#include <stdio.h>

// 交换函数
void swap(int* varA, int* varB) {
	int tmp = *varA;
	*varA = *varB;
	*varB = tmp;
}

int main() {
	int varA = 5;
	int varB = 10;
	int* varAp = &varA;
	int* varBp = &varB;
	swap(varAp, varBp);
	printf("varA的值是%d\n", varA);
	printf("varB的值是%d\n", varB);
	return 0;
}

/* >>
varA的值是10
varB的值是5
*/

哎嘿,成了!😃

没有“指针之神”的加持之力,swap 函数是值传递,值传递在调用函数时,将实参的值复制给形参,在函数内部对参数的修改不会影响实际参数。你可以这样想,你把房产证复印件给了别人,别人将此改了名,那么房产证的名是真的改了吗?🤔

在“指针之神”的加持之力下,swap 是引用传递,引用传递在调用函数时,将实参的地址传递给形参,在函数内部对参数的修改会影响实际参数。你可以这样想,你把房产证给了别人,别人将此改了名,那么这回房产证的名是真的改了吧。😮

可变参数

了解即可,写普通代码也是很少用了🤔

有些时候,函数的参数数量是不确定的,可以使用省略号...表示可变数量的参数。

c
int myFun (int a, ...);

6.3 入口函数

别打成 mian() 就行😒

C 语言规定,main() 函数是程序的入口函数

  • 所有的程序一定要包含一个main()函数。

  • 程序总是从这个函数开始执行,如果没有,该程序就无法启动。

  • 其他函数都是通过它引入程序的。

c
int main(void) 
{
  printf("Hello World\n");
  return 0; //可忽略(建议写上) 
}

//return 0; 表示函数结束运行,返回 0
//C 语言约定,返回值 0 表示函数运行成功,如果返回其他非零整数,就表示运行失败

函数原型

“函数必须先声明,后使用”,那就是说必须在main()函数前声明呗?🤔

因为程序会先运行main()函数,所以其他函数都必须在main()函数之前声明。否则编译时会产生警告。也可以在程序开头处给出函数原型,函数就可以先使用、后声明。

所谓函数原型,就是提前告诉编译器,每个函数的返回类型和参数类型。具体的函数实现可以后面再补上。

c
int plus(int a,int b);

int main(int num) {
  return plus(3, 4);
}

int plus(int a,int b) {
  return a + b;
}

6.4 函数指针

函数指针

函数指针是指向函数的指针变量。函数指针可以像一般函数一样,用于调用函数、传递参数。

TIP

一般 C 语言中的函数指针不会单独使用,而会作为回调函数使用,允许将函数作为参数传递给其他函数。

c
#include <stdio.h>

int max(int x, int y) {
	return x > y ? x : y;
}

int main(void) {
	/* p 是函数指针 */
	int (* p)(int, int) = & max; // &可以省略
	int a = 1, b = 2, c = 3, d;
	/* 与直接调用函数等价,d = max(max(a, b), c) */
	d = p(p(a, b), c);
	printf("最大的数字是: %d\n", d);
	return 0;
}

写在最后

如果一段代码重复使用且逻辑完整建议拆分成函数🤔

函数算是以上文章的“结合体”了,你可以在函数中写变量、运算或控制流。函数是一个程序的“子体”,一起组成了一个完整的程序。

如有转载或 CV 请标注本站原文地址