函数的声明
下面函数是没有使用函数声明。把函数的定义写在main函数之前。
# include <stdio.h>
void f(void)
{
printf("Hello World!/n");
}
int main(void)
{
f();
return 0;
}
下面是使用了函数声明语句,把定义函数写在main之后
# include <stdio.h>
void f(void); //函数声明语句,如果不写,则程序报错。
int main(void)
{
f();
return 0;
}
void f(void)
{
printf("Hello World!/n");
}
- 注意的问题:
- 函数调用和函数定义的顺序
如果函数调用写在了函数定义前面,则必须加函数的声明 - 函数前置声明
- 告诉编译器即将可能出现的若干个字母代表的是一个函数
- 告诉编译器即将可能出现的若干个字母所代表的函数的形参和返回值的具体情况
- 函数声明是一个语句,末尾必须加分号
- 对库函数的声明是通过 # include <库函数所在的头文件.h>来实现的
- 函数调用和函数定义的顺序
形参与实参
- 个数相同
- 位置一一对应
- 数据类型必须相互兼容
如何合理设计函数
# include <stdio.h>
/*
功能:判断一个数是否是素数
*/
bool IsPrime(int val)
{
int i;
for (i=2; i<val; i++)
{
if (val % i == 0)
break;
}
if (i == val)
return true;
else
return false;
}
/*
功能:把1到n之间所有的素数在显示器上输出
*/
void TraverseVal(int n)
{
int i;
for (i=2; i<=n; ++i)
{
if (IsPrime(i))
printf("%d\n", i);
}
}
/*
功能:用两个函数实现,输入一个数字,把1到它之间的素数输出
*/
int main(void)
{
int val;
printf("请输入您相判断的数字:");
scanf("%d", &val);
TraverseVal(val);
return 0;
}
上面的例子简单的运用了如何高质量的设计函数,把上面的任务划分为两个函数,每一个函数都只做一个事。
- 一个函数的功能尽量独立、单一
- 多学习,多模仿牛人的代码
函数是C语言的基本单位,类是java,c#,c++的基本单位
常用的系统函数
double sqrt(double x); 求x的平方根
int abs(int x); 求x的绝对值
double fabs(double x); 求x的绝对值
变量的作用域和存储方式
- 按作用域分:
- 全局变量
在所有函数外部定义的变量叫全局变量
全局变量使用范围:从定义位置开始到整个程序结束 - 局部变量
在一个函数内部定义的变量或者一个函数的形式参数定义的变量,都统称为局部变量
局部变量使用范围:只能在本函数内部使用
- 全局变量
void f(int i)
{
int j = 20;
} // i,j都是局部变量
注意问题:全局变量和局部变量命名冲突的问题
# include <stdio.h>
int i = 99;
void f(int i)
{
printf("%d\n", i);
}
int main(void)
{
f(8);
return 0;
}
在一个函数内部如果定义的局部变量的名字和全局变量名字一样时,局部变量会屏蔽掉全局变量
- 按变量的存储方式
- 静态变量
- 自动变量
- 寄存器变量