zoukankan      html  css  js  c++  java
  • C-函数

    1.C的设计原则是把函数作为程序的构成模块。

    2.函数是完成特定任务的程序代码的自包含单元。函数一般有两个功能,执行某些动作;返回一个值以供调用程序使用。

    3.使用函数的好处,代码重复利用;是程序更加模块化。

    4.通常把函数看作黑盒子,对于一定的输入会产生特定的结果,而不用考虑内部实现,除非是函数的编写者。这样看待函数有助于把精力放在程序整体设计而不是具体实现细节。

    5.编写函数需考虑函数要的功能和函数与程序整体上的关系。

    6.函数的声明(ANCI C函数原型),告诉编译器函数的类型,且需要在其他地方找到该函数的定义。

    函数的定义,函数的具体实现,确切的指定了函数的具体功能。

    函数的调用,导致该函数被执行。

    函数必须先声明后使用。函数定义在调用之前,可不声明,函数定义在调用之后或在其他文件中,那么调用之前必须先声明。被调用函数声明可在调用函数之外,也可在调用函数内任何可以放置变量声明的位置。

    7.函数声明(ANCI C函数原型)

    返回值类型  函数名(形参类型1  参数名1,形参类型2  参数名2);)(声明了函数名,函数返回值类型,函数参数个数和类型)

    返回值类型  函数名(形参类型1,形参类型2);(省略参数名)

    int prinf(char *, ...);//不确定参数函数的声明

    void aaa(void);//无参数无返回值函数的声明

    int bbb(int m, int n);

    int bbb(int, int);

    旧式函数声明:

    void aaa();

    int bbb();(只需要声明函数返回值类型,不需要参数信息)

    ANCI C函数原型的好处,通知编译器更多信息,使其在编译函数调用语句时能检查更多错误。

    8.函数定义

    返回值类型 函数名(形参类型1  参数名1,形参类型2  参数名2)//函数头

    {

      //函数体

    }

    int bbb(int  m, int  n)

    {

      //函数体

    }

    形式参量(形参)和定义在函数内部的变量一样,是局部变量,是函数私有的。即时在函数外部使用同名的变量,也不会有任何冲突,它们是同名的,相互独立的,互不相关的。

    旧式函数定义:

    int bbb(m , n)

    int m,n;

    {

      //函数体

    }

    9.函数调用

    函数名(实参1, 实参2);

    aaa();

    bbb(12, 5);

    形式参量(形参)是被调用函数中的变量(在函数头中声明),实际参数(实参)是调用函数传递给被调用函数的形参的特定数值。传递是复制操作,就是说被调用函数中对复制数值做的任何操作,都不会影响调用函数中的原数值。

    函数调用的时候,将创建形参(局部变量),并将用实参作初始化。

    10.使用return语句从函数中返回一个值,并终止函数的执行,将程序控制权交给调用函数的下一条语句。一般是函数体最后一条语句。该值就是函数的返回值,被存储在一个匿名变量中。因此,函数调用语句可用来赋值和参与运算。

    若return返回的值类型与函数定义的返回值类型不一致,会被自动转换成定义的返回值类型。

    函数之间的关系,调用与被调用;函数之间通过参数与返回值进行通信。C中所有函数同等地位,都可以调用其他函数或着被调用。

    11.C允许一个函数调用其自身,这种调用过程称为递归。

    递归原理:

    每一级函数都有自己的私有变量;

    每一次函数调用都会有一次返回;

    函数中,位于递归调用前的语句和各级被调用函数拥有相同的执行顺序,位于递归调用之后的语句与各级被调用函数执行顺序相反;

    虽然每一级函数都有自己的私有变量,但函数代码并不会得到复制;

    递归函数中必须包含可以终止递归调用的语句。

    尾递归,就是把递归调用放在函数末尾,return语句之前。尾递归的作用相当于循环语句。

    递归的缺点,会很快占用大量内存。

    12.多源代码文件的编译

    main函数在一个源文件中,自定义函数在一个源文件中,函数原型和常量定义放在头文件中。

    13.指针

    指针就是内存地址,表现为无符号整数,通常是16进制格式。

    指针变量(简称指针)是存放地址的变量。

    指针的声明:

    int * point;//指向一个整数变量的指针,数据类型是int *,*表示point是指针变量,int表示point指向一个整数变量。

    char * chr;//指向一个字符变量的指针

    float * flt;//指向一个单精度浮点数变量的指针

    指针运算符:间接运算符(取值符)*,地址运算符(取地址符)&

    &后跟一个变量名,&给出变量的地址,*后跟一个指针变量或地址,*给出存储在被指向地址中的值。

    int a = 10, b;

    int * point, * point2;

    point = &a;

    b = *point;

    编写程序时,变量有三个属性,变量的名字,类型,数值;编译加载后,变量有两个属性,地址和数值。变量的地址可以看作在计算机中的名称。

    14.指针作为函数的参数

    将调用函数变量的指针作为实参传递给被调用函数的形参,可以改变调后函数的变量。

    不要将被调用函数变量的指针作为返回值传递给调用函数,因为局部变量的生命周期在被调用函数执行完就结束了,被释放了,调用函数后续使用该值回造成错误。

  • 相关阅读:
    linux常用命令
    UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 2411: illegal multibyte sequence错误解决方案
    python中的yield通俗理解
    搭建hadoop+spark+hive环境(centos极速安装和配置hive)
    搭建hadoop+spark+hive环境(centos极速安装和配置spark)
    搭建hadoop+spark+hive环境(centos全远程hadoop极速安装及配置)
    pycharm使用conda环境,部分包没有代码提示或包名没有显示
    anaconda下安装的TensorFlow没有代码补全解决方案
    faceswap安装,配置,使用记录(RTX2060s+CUDA10.1+cudnn7.6.2+Anaconda3.5.2+tensorflow-gpu)(一)
    Leetcode 872. 叶子相似的树
  • 原文地址:https://www.cnblogs.com/gt1989/p/6676324.html
Copyright © 2011-2022 走看看