函数
有参函数
int max(int a,int b){//a、b均为形参
(a>b)?return a: return b;
}
int main(){
int x = 5;
int y = 6;
max(x,y);//x、y均为实参
return 0;
}
形参只有被调用时才分配内存单元,调用结束后,即刻释放。
函数声明
int main(){
int x=5;
int y=6;
max(x,y);
return 0;
}
int max(int a,int b){
(a>b)? return a: return b;
}
如果被调函数的返回值是整型或字符型时,可以不事先说明被调函数而直接调用。
参数为数组的函数
int example1(int a[]);
int example2(int b[5]);
int main(){
int x[6];
int y[5];
example1(x);
example2(y);
}
调用之后,随着数组会随形参值的变化而变化。多维数组也可以作为函数的参数,在函数定义时对形参数组可以指定每一维的长度,也可以省去第一维的长度。
int MA(int a[3][10]);
int MA(int a[][10]);
变量的作用域
主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用。因为主函数与其他函数是平行关系。
main(){
int s,a;
...
{
int b;
s=a+b;
...//b的作用域
}
...//s、a的作用域
}
如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”。
用户存储空间
程序区
静态存储区
存放全局变量,程序开始执行时就给全局变量分配存储区。
动态存储区
函数形式参数;自动变量(未加static声明的局部变量);函数调用实的现场保护和返回地址;
变量的存储类别
auto变量,默认都是,自动分配内存单元。static,静态局部变量在编译时赋初值,如果不赋初值则自动赋0。register,将局部变量的值放在CPU的寄存器中。extern,如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。如果在定义点前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”。
预处理命令
宏定义
#define PI 3.14159
#define M (y*y+3*y)//编码时用M来代替后面一长串符号,在编译时,将所有M替换为(y*y+3*y)
#define N(x) x*x+3*x
N(5);//调用
如果要终止宏定义的作用域,可以使用#undef。如果宏名在源程序中用引号括起来,则不替换。
文件包含
#include "stdio.h"//在当前的源文件目录中查找,未发现,到包含目录中查找
#include <math.h>//直接在包含目录中查找
条件编译
#ifdef 标识符//#ifndef 未被定义过
程序1
#else
程序2
#endif
如果标识符已经被#define命令定义,则编译程序1,否则编译程序2
#if 常量表达式
程序1
#else
程序2
#endif
如果表达式为真(非零),则对程序1编译