一:标准库函数
需要包含对应的头文件。
二:自定义函数:函数的声明,定义和调用,参数的传递。
1.函数的声明:
1)如果主调函数在被调函数之前,则需要对其进行函数声明。声明部分可以写在主函数的任何位置,尽量写在主函数之前。
一般形式:类型标识符 函数名(类型 形参名1 , 类型 形参名2,……);
注意:1.形参用逗号隔开。
2.末尾要加分号。
2)如果主调函数在被调函数之后,则不需要对其进行函数声明。
2.函数的定义:
一般形式:类型标识符 函数名(类型 形参1,类型 形参2,……);
{
函数体
}
类型标识符:指定函数返回值的类型。
return语句:一般形式:1)return 表达式 ;
2)return (表达式);
3)return;
注意:如果直接使用return;或者直接省略,则说明该函数无返回值。
无返回值的函数:函数类型标识符用“void”。
int a(void) 表示函数没有形参
形参:函数括号内的参数,当定义有参函数时,形参的值由实参提供。当定义无参函数时,则没有形参,函数后面括号中加入‘void’或者空着。
3.函数的调用:
有参函数的调用:函数名(实参1,实参2,……);
无参函数的调用:函数名();
注意:1)调用时实参与形参的个数,类型和顺序应一致。若类型不一致,将实参值的类型转换为形参值。(自己写代码使其一致,避免出错)
2)若函数类型与return之后表达式的类型不同,函数类型决定返回值的类型。
返回值为1。
3)实参可以是常量,变量或者表达式。形参只能是变量。
4)无参函数不能在表达式中调用,也不能作为另一个函数的参数,只能以语句的形式调用。
4.参数的传递:
1)值传递:实参值复制给形参。(传值)
2)引用传递:把实参的储存地址传递到形参中去。(传址)
注意:值传递只能是单向传递,形参值不能传给实参。
三:变量的作用域和变量的储存类别
1.变量的作用域(这块我感觉还是比较简单的部分)
1)局部变量:函数内部定义。
2)全局变量:函数外部定义。
注意:1)局部变量定义时未初始化取随机值,全局变量定义时未初始化,赋值为0。
2)同一源文件,允许全局变量和局部变量同名。此时在局部变量的作用域内,局部变量有效。
3)在全局变量之前的函数中或其他文件的函数中引用该局部变量,使用extern声明。
4)全局变量的定义在所有函数之外,且只能定义一次。
2.变量的储存类别(重要)
根据其生存期分为静态存储方式和动态存储方式。
四种类型:自动变量(auto),静态变量(static),外部变量(extern),寄存器变量(register)。
1.自动变量(auto):属于动态存储方式。未加存储类别声明的变量均视为自动变量(可省去auto)。
生存期结束时自动变量的值会丢失。不被初始化,其值不定。
2.静态变量(static):局部变量的值在函数调用结束后仍保存在内存中,在下次调用函数时,变量的值就是上次函数调用后的值。
分为静态局部变量和静态全局变量:说明前加上static关键字即可。
注意:1)静态局部变量定义时没有被初始化自动赋值为0。
2)局部变量改为静态变量:改变了变量的生存期。
全局变量改为静态变量:改变了变量的作用域。
3.外部变量(extern):等同于全局变量。如果在该变量定义之前的函数中或者其他文件中想使用该全局变量,需要使用关键字extern进行声明。
4寄存器变量(register):储存在CPU中,读取速度更快。
寄存器变量的注意事项:
1)寄存器变量为动态存储方式,只有局部自动变量和形参可定义为寄存器变量。一般只将整型和字符型定义为寄存器变量
2)不能定义多个寄存器变量。
3)使用完寄存器变量应尽快释放,提高寄存器的利用效率。
4)不能对其进行取地址运算。
四:辨析四种类型:1.有参数有返回值。2.有参数无返回值。3.无参数有返回值。4.无参数无返回值。
下面我用一个很简单的的例子来区别这四种类型:比较a和b的大小。
1.有参数有返回值
2.有参数无返回值
无返回值被调函数只能被整体调用,不能作为表达式的一部分。
3.无参数有返回值
4.无参数无返回值
我刚看这一部分,确实是毫无头绪,重在理解,多看几次,感觉也不是很难理解。
以上是我对函数知识点的理解,可能有错误的地方,多多包涵,请指出错误我会及时更正。