C语言学习易错点总结(五)---函数与预处理

函数

有参函数

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编译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值