C语言函数
一、
- 函数是构成程序的基本模块;
- 从使用者角度对函数分类可分为:标准库函数 和 自定义函数;
- 从函数的形式来看函数可分为:无参函数 和 有参函数;
- C程序执行都是都从main函数开始,main结束;
- 除了main函数,其他函数地位都是平行的且可以相互调用;main函数是系统调用;
二、函数定义
- 函数的一般形式:
返回值类型 函数名(类型 形式参数1 , 类型 形式参数2, …)
{ 函数体语句; }
函数头部中的形式参数也属于内部变量;
若函数没有返回值,需要用void来定义函数值类型,这时可以没有return语句,函数执行完再返回;且main函数中实参不能赋值给其他变量。
三. 函数的调用:
-
一般格式:
函数名(实参表列);vc++2010编译器是从右向左调用实参。 -
函数的书写格式:
a. b. c.(最规范写法)
void main() int main() int main(void)
{ { {
return (0); return 0;
} } }
四. 函数的数据传递
#include <stdio.h>
int Addition(int x,int y);//加法
int main()
{
int a,b;
int c;
scanf("%d %d",&a,&b);
c = Addition(a,b);
/*程序运行到这时,实参a,b的值会传递给形参x,y;且实参值不发生改变;*/
printf("%d\n",c);
printf("%d %d\n",a,b);
return 0;
}
int Addition(int x,int y)
{
int z;
z = x+y;
return z;
/*返回值也可以是表达式:return (x+y);返回值应与函数定义时的返回值类型一致;*/
}
改错题记得注意声明的类型;例如 整形除以浮点型
五. 一维数组作为函数参数
a.函数也可以写成这种格式
/*对输入值进行输出*/
#include <stdio.h>
void Put(int b[5]);
/* 也可以写为int b[],此时数组的长度可以不写*/
int main()
{
int a[5];
int i;
for(i=0;i<=4;i++)
{
scanf("%d",&a[i]);
}
Put(a);//将a数组的地址传给b,传递的是所有值
return 0;
}
void Put(int b[5])//输出;
{
int i;
for(i=0;i<=4;i++)
{
printf("%3d",b[i]);
}
putchar('\n');
}
b.函数还可以写成这种格式
/*对数组中一个值进行输出*/
#include <stdio.h>
void Put(int b)
{
printf("%d\n",b);
}
int main()
{
int a[5] = {5,6,7,8,9};
Put(a[1]);//只传递数组中一个值
return 0;
}
六、 二维数组作为函数参数
/*对二维数组中的值进行输出*/
#include <stdio.h>
void Put(int b[][3]);//输出;第一维的长度声明可以不写
int main()
{
int a[2][3] = {1,2,3,4,5,6 };
Put(a);
}
void Put(int b[][3])
{
int j,k;
for(j=0;j<=1;j++)
{
for(k=0;k<=2;k++)
{
printf("%d\n",b[j][k]);
}
}
}
7. 变量作用域和存储类型
- 不在任何语句块内定义的变量称为 全局变量;(全局变量作用于整个程序)
#include <tdio.h>
int p; //这就是全局变量
int main()
{
......
return 0;
}
- 在语句块内定义的变量,称为 局部变量;做用于该语句块内(作用于该大括号内);
#include <tdio.h>
int main()
{
int a = 2;//局部变量
.....
return 0;
}
-
变量定义的一般形式为 存储类型 数据类型 变量名;
-
变量的存储类型:自动变量、静态变量、外部变量、寄存器变量
a.自动变量( auto ) 与该 程序块 共存亡
一般形式为: auto 类型名 变量名 ( 例,auto int a; )
如果没有指定变量存储类型,则默认为 auto 形式;
每次自动变量进入语句块时自动申请内存,退出语句块释放内存且丢失数值(调试时会看到值成为乱码);
自动变量定义时不会自动初始化,需要赋初值;
b.静态变量 ( static )与 程序 共存亡
一般形式为: static 类型名 变量名( 例,static long sum; )
静态变量从程序开始就占内存,程序退出才释放内存;
静态变量的值在退出函数后仍能保持其值到下一次进入函数;
静态变量自动初始化值为0;
c.外部变量( extern )
一般形式为: extern 类型名 变量名
全局变量定义时没有声明存储类型则认为是外部变量
外部变量在程序运行期间会有固定的储存单元,作用域从它定义点到文件结尾;
外部变量自动初始化值为0;
d.寄存器变量( register )
一般是形式为:register 类型名 变量名
寄存器是CPU内部的一种容量有限但速度极快的存储器;
现代编译器能自动优化程序,无需特别声明register。