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\n",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

函数,#include <>和#include " "区别的更多相关文章

  1. <%@page include%>、<%@include%>、<jsp:include>三者之间的本质区别

    <%@page include%>.<%@include%>.<jsp:include>三者之间的本质区别 先从它的几个内置对象说起. application和se ...

  2. include和require区别

    1.  include()执行的时候需要引用的文件每次都要进行读取评估; require()执行时需要引用的文件只处理一次(实际上执行时需要引用的文件内容替换了require()语句) 可以看出若有包 ...

  3. [转]<jsp:include>和<%@include%>的区别

    首先,转发自yangbobo1992的 <jsp:include>和<%@include%>的区别 这个是我见过写的最好的之一 <%@include%>和<j ...

  4. JSP(include指令与<jsp:include>动作的区别)

    <%@ page language= "java" contentType="text/html;charset=UTF-8" %><html ...

  5. include指令和include标签的区别

    区别 类别 语法 发生作用时间 包含的内容 转化成Servlet 编译时间 运行时间 include指令 <%@ include file="" %> 页面交换 实际内 ...

  6. [C] include <filename> 和 include "filename" 的区别

    在 C 语言中包含语句 #include <filename> 和 #include "filename" 的区别在于编译器的偏好,一般来说,使用双引号表示优先搜索当前 ...

  7. JSP -- include指令与include动作的区别

    JSP -- include指令与include动作的区别 (1)格式的区别: include指令:<%@include file = "文件名"%> include动 ...

  8. <jsp:include>和<%@include file=""%>的区别(简单了解)

    简单了解 include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改,否则视为已被修改.由于被包含的文件是在编译时才插入的 ...

  9. 转: JSP中include指令和include动作的区别

    include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改,否则视为已被修改.由于被包含的文件是在编译时才插入的,因此如果 ...

  10. Makefile中指示符“include”、“-include”和“sinclude”的区别

    转:http://www.cnblogs.com/xmphoenix/archive/2012/02/22/2363335.html 指示符“include”.“-include”和“sinclude ...

随机推荐

  1. Leetcode 233.数字1的个数

    数字1的个数 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 示例: 输入: 13 输出: 6 解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 . ...

  2. oracle 9i/10g/11g(11.2.0.3)安装包和PATCH下载地址汇总

    今天上PUB看见一位热心人汇总了这么个地址列表,转发来空间: 把下面的地址复制到讯雷里就可以下载. -------------------------------------------------- ...

  3. POJ 2777 Count Color【线段树】

    题目大意:要求完成以下两个操作:1.将一个区间刷上一种颜色2.询问一段区间上有多少种颜色 思路:这两个操作线段树都可以很迅速的完成,具体做法是:线段树上每个节点存这个线段上的颜色数量,由于颜色数很少, ...

  4. Pollard rho模板

    #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #in ...

  5. msp430项目编程12

    msp430中项目---温度检测系统 1.ds18b20工作原理 2.电路原理说明 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习

  6. socket相关

    socket层 图示,没有找到socket,那么socket层在哪儿呢? 看图: socket是什么 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Sock ...

  7. Python()- 面向对象三大特性----封装

    封装: [封装]         隐藏对象的属性和实现细节,仅对外提供公共访问方式.[好处] 1. 将变化隔离: 2. 便于使用:3. 提高复用性: 4. 提高安全性:[封装原则]      1. 将 ...

  8. Maven 手动添加本地jar包

    mvn install:install-file -Dfile=jar绝对路径 -DgroupId=项目组织唯一的标识符 -DartifactId=项目的唯一的标识符 -Dversion=jar版本 ...

  9. HDU 6370 dfs+并查集

    Werewolf Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  10. BNUOJ Eeny Meeny Moo

    Eeny Meeny Moo Time Limit: 1000ms Memory Limit: 65535KB                     大家都有这种经验,当太多的人同时使用互联网的时候 ...