精通学习C语言——函数(1)

函数是什么⊙∀⊙?C语言的函数和其他语言的函数相似之处甚多,C中函数分为库函数和自定义函数,下面分别进行简单介绍。

  1. 库函数
    C语言中的库函数,很大程度上解决了我们在编写程序中的繁琐步骤,例如经常会遇到的基本功能,开发过程中每个程序员都可能用到的,为了支持可移植性和提高效率,所以就有了库函数的产生,方便程序员进行开放。这里有一个库函数学习网址可以推荐:www.cplusplus.com 。
    C语言常用的库函数包括,IO函数,字符串操作函数,字符操作函数,内存操作函数,时间函数,数学函数以及其他库函数等。例如:
strcpy
char * strcpy(char * destination, const char * source);
memset
void * memset(void * prt, int value, size_t num);

需要注意的是在使用库函数的时候,一定要引用include所对应的头文件。

  1. 自定义函数
    因为库函数的局限性,所以在开发的工程中,自定义函数更加重要。自定义函数和库函数一样,在设计的工程中要包含函数名,返回值类型和函数参数,因为是程序员自己进行设计,所以有很大的发挥空间,不像库函数一样只能按规定调用。例如,我们写一个简单的函数进行举例:
//写一个函数可以找出两个整数中的最大值
#include <stdio.h>
int get_max(int x, int y)//x和y为函数接收的参数
{
    return (x > y) ? (x) : (y);//这里写了一个三目操作语句,进行判断选择,然后直接返回
}
int main()
{
    int num1 = 10;
    int num2 = 20;
    int max = get_max(num1, num2);//调用函数,需要传参
    printf("max = %d\n",max);//printf就是一个库函数,需要引用头文件
    return 0;
}
  1. 函数的参数
    函数的参数分为实际参数(实参)和形式参数(形参),实参即真实传给的函数,例如常量,变量,表达式和函数等,无论实参是何种类型的量,在进行函数调用时,他们都必须有确定的值,以便把这些值传送给形参。形参是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才会实例化(分配内存单元),所以叫形式参数,形参当函数调用完成之后就自动销毁了,因此形参只在函数中才有效。上例中,get_max函数中x和y都是形参,main函数中传给get_max的num1,num2都是实参。

  2. 函数的调用
    函数的调用又分为传值调用和传址调用。传值调用中,函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参;而传址调用中是吧函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式,这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。函数的调用方式又包含嵌套调用和链式访问。

//嵌套调用
void new_line()
{
    printf("呵呵\n");
}
void three_line()
{
    int i = 0;
    for(i = 0; i < 3; i++)
    {
        new_line();
    }
}
int main()
{
    three_line();
    return 0;
}

//链式访问
//把一个函数的返回值作为另一个函数的参数
int main()
{
    char arr[20] = "hello";
    int ret = strlen(stract(arr,"world"));
    printf("%d\n",ret);
    return 0;
}
  1. 函数的声明和定义
    函数声明就是告诉编译器有一个函数叫什么,参数是什么,返回类型是什么,一般出现在函数的使用之前,要满足先声明后使用,通常情况要放在头文件中。函数的定义就是指函数的具体实现,交代函数的功能实现。
//test.h的内容,放置函数的声明
#ifndef __TEST_H__
#define __TEST_H__
//函数声明
int Add(int x, int y);

#endif //__TEST_H__

//test.c的内容,放置函数的实现
#include "test.h"//引用头文件
//函数Add的实现
int Add(int x, int y)
{
    return x + y;
}
发布了30 篇原创文章 · 获赞 31 · 访问量 1964

猜你喜欢

转载自blog.csdn.net/CCCC_CSDN_LI/article/details/105050711