第6章C语言的基本程序设计 6,1函数的定义与调用 62函数的嵌套调用和递归调用 63变量的作用域 64变量的存储类别 65内部函数与外部函数 66指针与函数 6,7用指针作函数参数 68数组作为函数参数 69返回指针的函数 6,10main函数的命令行参数
第6章 C语言的基本程序设计 6.1 函数的定义与调用 6.2 函数的嵌套调用和递归调用 6.3 变量的作用域 6.4 变量的存储类别 6.5 内部函数与外部函数 6.6 指针与函数 6.7 用指针作函数参数 6.8 数组作为函数参数 6.9 返回指针的函数 6.10 main函数的命令行参数
61函数的定义与调用 611函数定义的一般形式 从形式上看,函数分为有参函数和无参函数两种 形式。 有参函数定义的一般形式 类型名函数名(形式参数列表) 局部变量说明 语句序列部分; 个函数由两大部分组成:函数的说明部分和函 数体部分。 其中类型名、函数名和函数参数列表为函数的说 明部分,称为函数头部。花括号“{}”中的部分称为 函数体,包括局部变量说明和语句序列部分
6.1 函数的定义与调用 6.1.1 函数定义的一般形式 从形式上看,函数分为有参函数和无参函数两种 形式。 1.有参函数定义的一般形式 类型名 函数名(形式参数列表) { 局部变量说明; 语句序列部分; } 一个函数由两大部分组成:函数的说明部分和函 数体部分。 其中类型名、函数名和函数参数列表为函数的说 明部分,称为函数头部。花括号“{ }”中的部分称为 函数体,包括局部变量说明和语句序列部分
类型名指明了本函数的类型。函数的类型实际上 是函数返回值的类型,说明函数将给调用者提供 什么类型的返回值。 函数名是由用户定义的标识符。对自定义函数, 其命名遵循C语言标识符的命名规则。 形式参数表在函数名后的括号“()”内,由 个或多个类型标识符及变量标识符组成。在形参 表中给出的参数称为形式参数,简称形参,各参 数之间用逗号间隔。形式参数可以是各种类型的 变量,必须在形参表中给出形参的类型说明。在 进行函数调用时,主调函数将赋予这些形式参数 实际的值。 在函数体中局部变量说明部分,是对函数体内部 所用到的变量的类型说明。语句序列部分是实现 函数功能的核心部分,它由C语言的基本语句组 成
类型名指明了本函数的类型。函数的类型实际上 是函数返回值的类型,说明函数将给调用者提供 什么类型的返回值。 函数名是由用户定义的标识符。对自定义函数, 其命名遵循C语言标识符的命名规则。 形式参数表在函数名后的括号“()”内,由一 个或多个类型标识符及变量标识符组成。在形参 表中给出的参数称为形式参数,简称形参,各参 数之间用逗号间隔。形式参数可以是各种类型的 变量,必须在形参表中给出形参的类型说明。在 进行函数调用时,主调函数将赋予这些形式参数 实际的值。 在函数体中局部变量说明部分,是对函数体内部 所用到的变量的类型说明。语句序列部分是实现 函数功能的核心部分,它由C语言的基本语句组 成
2.无参函数定义的一般形式 类型名函数名( 局部变量说明; 语句序列部分; 无参函数从定义形式上看与有参函数的主要区 别是函数名后的括号“()”没有形式参数,但函 数名后的括号不可缺少 由于无参函数没有参数,因此在调用无参函数 时,主调用函数将不给被调用函数传递数据。并且 大多数情况下,都不要求无参函数有返回值,对没 有返回值的函数,其“类型 ”可写为void,表示 该函数不返回任何类型的值
2.无参函数定义的一般形式 类型名 函数名() { 局部变量说明; 语句序列部分; } 无参函数从定义形式上看与有参函数的主要区 别是函数名后的括号“()”没有形式参数,但函 数名后的括号不可缺少。 由于无参函数没有参数,因此在调用无参函数 时,主调用函数将不给被调用函数传递数据。并且 大多数情况下,都不要求无参函数有返回值,对没 有返回值的函数,其“类型名”可写为void,表示 该函数不返回任何类型的值
612函数的调用 定义函数的目的是实现程序的某些子功能, 供其它函数调用 1函数调用的一般形式 C语言中,函数调用的一般形式为: 函数名(实际参数表) 实际参数表中的参数可以是常数,变量或其 它构造类型数据及表达式。各实参之间用逗号 分隔,实参的顺序、类型必须与被调用函数的 形参保持一致。无参函数调用时无实际参数表
6.1.2 函数的调用 定义函数的目的是实现程序的某些子功能, 供其它函数调用。 1.函数调用的一般形式 C语言中,函数调用的一般形式为: 函数名(实际参数表) 实际参数表中的参数可以是常数,变量或其 它构造类型数据及表达式。各实参之间用逗号 分隔,实参的顺序、类型必须与被调用函数的 形参保持一致。无参函数调用时无实际参数表
2函数调用的方式 C语言中调用函数通常有函数表达式、函数 语句和函数实参3种方式,下面分别举例介绍 (1)函数表达式方式:函数调用出现在表达 式中,这种表达式称为函数表达式。这种方式 要求函数一定要有返回值,以参加表达式的运 算。否则会出现表达式错误 (2)函数语句方式:函数调用的一般形式加 上分号即构成函数语句。这种方式不需要函数 有返回值
2.函数调用的方式 C语言中调用函数通常有函数表达式、函数 语句和函数实参3种方式,下面分别举例介绍。 (1)函数表达式方式:函数调用出现在表达 式中,这种表达式称为函数表达式。这种方式 要求函数一定要有返回值,以参加表达式的运 算。否则会出现表达式错误。 (2)函数语句方式:函数调用的一般形式加 上分号即构成函数语句。这种方式不需要函数 有返回值
3函数的声明 函数声明的一般形式为: 类型名函数名(类型形参,类型形参..) 括是内给出了形参的类型和形参名,这便于 编译系统进行检错,以防止可能出现的错误 注意,函数声明后面的分号“;”不能少 C语言规定,对以下几种情况可以省去主调 用函数中对被调用函数的函数说明(声明 )当被调用函数的返回值是整型或字符型时, 可以不在主调用函数中说明而直接调用。这时系 统将自动对被调用函数返回值按整型处理。 2)当被调用函数的函数定义出现在主调用函 数之前时,主调用函数中不用再对被调用函数说 明,可以直接调用
3.函数的声明 函数声明的一般形式为: 类型名 函数名(类型 形参,类型 形参…); 括号内给出了形参的类型和形参名,这便于 编译系统进行检错,以防止可能出现的错误。 注意,函数声明后面的分号“;”不能少。 C语言规定,对以下几种情况可以省去主调 用函数中对被调用函数的函数说明(声明)。 (1)当被调用函数的返回值是整型或字符型时, 可以不在主调用函数中说明而直接调用。这时系 统将自动对被调用函数返回值按整型处理。 2)当被调用函数的函数定义出现在主调用函 数之前时,主调用函数中不用再对被调用函数说 明,可以直接调用
3)如在所有函数定义之前,在函数外预先说明了 各个函数的类型,则在以后的各主调用函数中 不用再对被调用函数作说明 4)对库函数的调用不需要再作说明,但必须把该 函数的头文件用 include命令包含在源文件前部 613函数的参数和函数的值 1.函数的参数 在调用函数时,主调用函数把实参的值传送给被 调用函数的形参,从而实现了主调用函数向被调 用函数的数据传递 参数传递具有以下特点: (1)实参与形参各自占用独立的存储单元,函数 调用时才将实参的值传递给形参单元
3)如在所有函数定义之前,在函数外预先说明了 各个函数的类型,则在以后的各主调用函数中, 不用再对被调用函数作说明。 4)对库函数的调用不需要再作说明,但必须把该 函数的头文件用include命令包含在源文件前部。 6.1.3 函数的参数和函数的值 1. 函数的参数 在调用函数时,主调用函数把实参的值传送给被 调用函数的形参,从而实现了主调用函数向被调 用函数的数据传递。 参数传递具有以下特点: (1)实参与形参各自占用独立的存储单元,函数 调用时才将实参的值传递给形参单元
(2)形参变量只有在发生函数调用时才临时分 配内存单元,在调用结束时,即释放所分配的内 存单元。因此形参只在函数内部有效,函数调用 结束返回主调用函数后,形参变量不再存在,不 要企图在主调用函数中去使形参变量 (3)实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时, 它们都必须具有确定的值,以便把这些值传递给 形参 (4)实参和形参在数量上、类型上、顺序上应 严格一致,否则会发生“类型不匹配”错误。 (5)函数调用中发生的数据传递是单向的。即 只能把实参的值传送给形参,而不能把形参的值 反向地传送给实参。因此在函数调用过程中,形 参的值发生改变不会影响实参的值
(2)形参变量只有在发生函数调用时才临时分 配内存单元,在调用结束时,即释放所分配的内 存单元。因此形参只在函数内部有效,函数调用 结束返回主调用函数后,形参变量不再存在,不 要企图在主调用函数中去使用形参变量。 (3)实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时, 它们都必须具有确定的值,以便把这些值传递给 形参。 (4)实参和形参在数量上、类型上、顺序上应 严格一致,否则会发生“类型不匹配”错误。 (5)函数调用中发生的数据传递是单向的。即 只能把实参的值传送给形参,而不能把形参的值 反向地传送给实参。因此在函数调用过程中,形 参的值发生改变不会影响实参的值
2.函数的值 函数的值是指函数被调用结束之后,返回给主调用函 数的值 有两种情况可以终止被调用函数的执行并返回到调用 它的函数中:一是执行到函数的最后一条语句后自然返 回到调用它的函数中的调用处,这种情况一般不要求函 数返回值;一是在函数执行过程中遇到返回语句时,将 终止后续语句的执行,直接返回到调用它的函数中的调 用处,这种情况一般都要求被调用函数返回一个值;C语 言中的返回语句为 Ireturn语句。 return语句的一般形式为: return表达式: 或 return(表达式);
2. 函数的值 函数的值是指函数被调用结束之后,返回给主调用函 数的值。 有两种情况可以终止被调用函数的执行并返回到调用 它的函数中:一是执行到函数的最后一条语句后自然返 回到调用它的函数中的调用处,这种情况一般不要求函 数返回值;一是在函数执行过程中遇到返回语句时,将 终止后续语句的执行,直接返回到调用它的函数中的调 用处,这种情况一般都要求被调用函数返回一个值;C语 言中的返回语句为return语句。 return 语句的一般形式为: return 表达式; 或 return (表达式);