zoukankan      html  css  js  c++  java
  • 函数,#include <>和#include " "区别

     

    l

    4.、函数定义到使用分三步:1、声明。2、定义函数。3、调用函数。

     

    2、函数的定义
    格式:
    返回值 函数名(形参列表){
    函数体;
    return }

     

    命名规则:
    1、只能由字母、数字、下划线或者美元符号($)组成
    2、不能以数字开头
    3、不能与关键字重名
    4、严格区分大小写

     


    4种

     

    有参无返回值:void test(int x,float y){ }

     

    无参无返回值:void test1(){ }

     

    有参有返回值: int max(int x,int y){ return x>y?x:y; }

     

    无参有返回值: int test2(){ return 10;}

     

    理解:
    有返回值,说明,主函数调用之后,要赋值给某个变量,或者这个返回值有用途

     

    函数名不能重名

     

    小总结:
    有参函数比无参函数多了参数表列 它们可以是各种类型的变量,各参数之间用逗号间隔,控制着被调函数

     

    有返回值比无返回值多了 返回值类型,return

     

    3、
    函数的参数

     

    1)形参和实参
    形参:在定义函数的时候,函数名后面小括号中的参数

     

    格式: 数据类型 变量 如:int x;

     

    形式参数是什么样类型的数据,那么实际参数也必须是什么样的类型

     

    形参变量只有在被调用时才分配内存单元

     

    形参的作用域:只能在本函数中使用

     

    在函数中,不能定义和形参同名的变量

     

    实参:调用函数的时候传递的参数 可以是变量,也可以是常量,也可是是表达式,还能是函数
    无论实参是何种类型的量,在进行函数调用时,它 们都必须具有确定的值,以便把这些值传送给形参。
    因此应预先用赋值,输入等办法使实参获得 确定值。

     

    max(56,78); 56、78就是两个实际参数

     

    形参和实参的功能是作数值的传递。
    发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主 调函数向被调函数的数据传送。

     

    3)实参和形参在 数量上 , 类型上 ,顺序上 应严格一致,否则会发生类型不匹配”的错误。

     

    知道什么是主调函数,什么是被调函数

     


    2)参数的传递的过程
    1.实参的值拷贝一份放到函数形参中
    2.实参的值是一个已经确定的值
    3.类型要保持一致
    4.形参的值可以改,但是实参不会变

     

    4、函数的返回值

     

    函数的值(或称函数返回值)是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。

     

    //被调函数返回给主调函数的值

     

    主调函数:A B两个函数 ,如果在A中调用了B,A叫主调函数,B被调函数
    return:被调函数返回给主调函数的值
    函数的返回值使用return 关键字进行返回
    1) return 0; return (0); //括号可以省略
    2) return a+b; return a>b?a:b; //可以是值也可以是表达式
    3) 如果函数的返回值是 void return ;//(程序返回了,不再向下执行)
    4) 函数中可以有多个return ,但是只有一个起作用
    5)函数定义的返回值类型与return的值类型不一致,以定义的函数类型为准
    6)如果函数是整形,可以忽略返回值类型

     


    5、函数的声明与调用
    1)函数的声明:
    为什么要进行声明?
    类似于变量的使用,我们要使用函数,就应该先定义函数,编译器不知道我们是否已经

     

    定义了某个函数,为了防止编译器编译的时候报错(函数调用)

     

    所以,要告诉编译器,我已经定义了哪些函数

     


    返回值类型 被调函数名( 类型 形参, 类型 形参... );
    返回值类型 被调函数名( 类型, 类型...);
    如:
    int max( int a, int b );
    int max( int, int );

     


    1/如果被调函数的返回值是int类型,此时可以不用声明
    2/如果被调函数写在主调函数之前,此时可以不用声明
    3/可以全局声明,也可能在主函数里面声明

     

    原则:
    在调用函数之前,进行该函数的声明
    声明的方法:
    技巧:复制函数的头部,加上分号,写在调用调用方法之前 int max(int x,int y); //声明

     

    //--------------------函数的调用

     

    max(56,78); //调用
    函数的调用
    函数名(实参列表);

     

    1) 函数表达式(该函数必须是有返回值)
    函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数 是有返回值的.
    int z=0;
    z = max(23, 80)+1;

     

    2) 函数语句
    函数调用的一般形式加上分号即构成函数语句。
    printf("%d",a); scanf("%d",&b);

     

    3) 函数实参(该函数必须是有返回值)
    函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送.
    因此要求该函数必须是有返回值的。
    printf("%d ",max(20, 30));

     

    4、函数名不能和变量名同名

    #waring C语言中允许函数嵌套调用,但是不允许作嵌套的函数定义。

     


    //----------------------递归函数

     

    一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。
    递归函数构成条件
    1)自己调用自己
    2)存在一个条件能够让递归结束
    3)能让问题的规模能够缩小

     

    栈 先进后出
    堆 先进先出

     

    //----------------------手动编译

     

    编译--->.o(目标文件)--->链接--->.out 执行

     

    cc -c main.c -------> cc main.o -------> ./a.out

     


    //----------------#include指令 预处理指令

     

    #include <> 包含一个系统(编译器自带)的头文件
    1、编译器的include路径下查找
    2、如果没有找到就系统include路径下查找
    3、如果都没有找到就报错

     

    编译器include ---> 系统include--> (如果找不到)报错
    include 不一定非要写在第一行

     


    #include " " 包含的是一个用户定义的文件,可以是头文件,也可是普通文件
    1、在当前文件所在的路径下查找
    2、如果上面没有找,到编译器include路径查找
    3、如果编译器include路径下没有找到,系统的include路径下查找
    4、如果上面三个都没有找到就报错了。

     

    当前文件夹 ----->编译器include ---->系统include-----> (如果找不到)报错

     

    Xcode自带编译器 include:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Develope r/SDKs/MacOSX10.10.sdk/usr/include/

     

    Mac系统的include路径有: /usr/include /usr/local/include

     

    Xcode的缓存:/Users/apple/Library/Developer/Xcode/DerivedData

     

     

    //------------------清空缓存的方法
    shift + cmd + k

     

    priduct + clean

     

     

  • 相关阅读:
    andriod的数据传递方法
    Activity生命周期详解
    android 和主线程有关的小问题
    java解析Excel(xls、xlsx两种格式)
    菜鸟感想一
    springboot 填坑一 springboot java.sql.SQLException: Access denied for user ''@'localhost' (using password: NO)
    git 第一次提交至仓库
    andriod studio报错 Emulator: emulator: ERROR: x86 emulation currently requires hardware acceleration! Emulator: Process finished with exit code 1
    通过以太坊发行代币(token)
    nginx+tomcat 配置负载均衡集群 (转载)
  • 原文地址:https://www.cnblogs.com/jiayongqiang/p/5091532.html
Copyright © 2011-2022 走看看