学习网站:C语言网.
编译器:Red Panda Dev-C++
1.函数定义和调用
/*
函数定义:
返回值类型 函数名(形参表说明)
{
说明语句; // 函数体;
执行语句;
}
Tips:
1.返回值类型:函数返回值的类型;函数返回值不能是数组,不能是函数,其他数据类型都可以是函数的类型,如:int,long,float,char等;
2.函数名:用户自定义的标识符;
3.形参:形参表是用逗号分隔的一组变量说明,包括形参类型和形参标识符;
4.函数体:用{}括起来的部分是函数的主体;函数体是一段程序,确定该函数应完成的规定的运算,应执行的规定的动作,集中体现了函数功能;函数内部有自己的说明语句和执行语句,但函数内定义的变量不可以和形参同名;
*/
/*
函数调用:主调函数使用被调函数的功能;
函数调用的一般形式:
函数名(类型 形参,类型 形参...);
调用函数方式1:函数表达式
函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算;
方式1要求函数有返回值;
maxNumber = max(x, y); // 把max返回值赋给maxNumber;
调用函数方式2:函数语句
函数调用的一般形式加上分号构成函数语句;
printf("Hello World.");
调用函数方式3:函数实参
函数作为另一个函数调用的实际参数出现;
把函数的返回值作为实参进行传送,方式3要求该函数有返回值;
printf("%d", max(x, y)); // 把max调用的返回值作为printf函数的实参;
Tips:
1.在主调函数中调用某函数前应对被调函数进行声明;
2.一般形式: 类型说明符 被调用函数名(类型 形参,类型 形参...);
*/
2.变量的存储类型
/*
Tips:
1.计算机中,保存变量当前值的存储单元有两类:内存和CPU的寄存器;
2.4种存储属性:自动变量(auto)、外部变量(extern)、静态变量(static)、寄存器变量(register);
3.变量的生存期:即变量的保留时间;分为:静态存储、动态存储;
4.静态存储:变量存储在内存的静态存储区,在编译时就分配了存储空间,在整个程序运行期间,该变量占有固定的存储单元,程序结束后,该部分空间被释放,变量的值在整个程序中始终存在;
5.动态存储:变量存储在内存的动态存储区,在程序运行过程中,只有当变量所在的函数被调用时,编译系统才临时为该变量分配一段内存单元,函数调用结束,该变量空间释放,变量的值只有在函数调用期存在;
6.作用域:即变量的作用范围;分为:局部变量、全局变量;
7.局部变量:在一个函数或复合语句内定义的变量,仅在函数或复合语句内有效,编译时,编译系统不为局部变量分配内存单元,在程序运行过程中,当局部变量所在的函数被调用时,编译系统根据需要,临时分配内存,调用结束,空间释放;
8.全局变量:在函数之外定义的变量,作用范围为从定义处开始到本文件结束,编译时,编译系统为其分配固定的内存单元,在程序运行的自始至终都占用固定单元;
*/
/*
auto自动变量类型Tips:
1.函数中的形参和函数中定义的变量均属于自动变量;
2.自动变量属于局部变量,在调用函数时系统给它们分配存储空间,在函数调用结束时,自动释放空间;
3.定义:
int fun(int a)
{
auto int b, c = 3; // 定义b,c为自动变量;
}
*/
/*
extern外部变量类型Tips:
1.外部变量即全局变量,在函数的外部定义,作用域从变量定义处开始,到本程序文件的末尾;
2.如果在定义点之前的函数想引用该外部变量,则应该在引用前用关键字extern对该变量进行外部变量声明;
3.通常的,用extern声明外部变量,扩展程序文件中的作用域;
*/
/*
static静态变量Tips:
1.通过用static类型声明后的变量,其变量内存空间位于内存的全局静态区,仅初始化一次;
*/
#include <stdio.h>
static int numberOne = 5;
int func(){
numberOne = numberOne * 2;
printf("numberOne = %d\n", numberOne);
return 0;
}
int main(void){
for(int i = 0;i <= 10;i++){
func();
}
return 0;
}
/*
register寄存器变量Tips:
1.只有局部自动变量和形式参数可以作为寄存器变量;
2.一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;
3.不能使用取地址运算符&来求寄存器变量的地址;
4.使用关键字register声明;
register int a = 10; // 将变量a存储在寄存器上;
*/
3.Demo
#include <stdio.h>
int func(int numberOne, int numberTwo);
int main(void){
int numOne, numTwo;
printf("Please input numOne and numTwo:\n");
scanf("%d", &numOne);
scanf("%d", &numTwo);
printf("%d * %d + %d * %d = %d\n", numOne, numOne, numTwo, numTwo, func(numOne, numTwo));
return 0;
}
int func(int numberOne, int numberTwo){
numberOne = numberOne * numberOne;
numberTwo = numberTwo * numberTwo;
return numberOne + numberTwo;
}