C 函数


C程序由函数和变量组成。函数是用于完成一个任务的一组语句。


每个C程序必须有一个main函数。main函数中再调用其它函数来完成功能。函数将大的任务分解成小的任务。可以调用其他人已经完成的函数,不用所有功能都自己开发。函数可以隐藏细节,函数调用方不用知道函数的具体实现。C标准库提供了大量函数。

函数声明(declaration)用于告诉编译器一个函数的名字、参数和返回值类型。函数定义(definition)提供函数的具体实现。

函数定义格式如下:

返回值类型 函数名(参数列表) {
  函数体
}

函数由4部分组成:

  • 返回值类型,是函数返回值的数据类型。如果函数没有返回值,返回值类型为void。
  • 函数名,是函数的名字,函数名和参数列表一起构成函数的签名。
  • 参数列表,参数用于函数调用方传递数据给函数。参数列表指定参数的类型和名称、参数的顺序和个数。
  • 函数体,函数体包含一组语句用于完成一个任务。

函数声明格式如下:

返回值类型 函数名(参数列表);

其中参数列表中的参数名称可以省略。

下面是函数的例子:

#include <stdio.h>
int sum(int, int);
void plus(int *);

int main(int argc, const char * argv[]) {
    int n = sum(2, 5);
    printf("n : %d. \n", n);  // 14

    int d = 5;
    int* p = &d;
    printf("Address of p : %p. \n", &p);  // 0x7fff5adddb00
    printf("p : %p. \n", p);              // 0x7fff5adddb08

    plus(p);
    printf("d : %d. \n", d);  // 6

    return 0;
}

int sum(int from, int to) {
    int n = 0;
    for (int i = from; i <= to; i++) {
        n += i;
    }

    return n;
}

void plus(int* p1) {
    printf("Address of p1 : %p. \n", &p1);  // 0x7fff5adddad8
    printf("p1 : %p. \n", p1);              // 0x7fff5adddb08
    *p1 += 1;
}

在C语言中,函数调用时参数通过传值方式从调用方传递给函数。在上面的例子中,指针p的值和addOne函数中的参数p1的值相同,指针p的地址和参数p1的地址不相同。