2016.7.26
变量的作用域:
文件域:在整个源文件声明的标识符,整个文件中都可以被访问。(如全局变量)
函数域:在函数原型中声明的标识符,整个函数能访问。(如形参)
语句块域:在一个程序结构块中声明的标识符,在该程序结构块中可以被访问。(如局部变量)
int num=10;// 文件域
void func(){
int num =20;// 函数域
{
int num=30;// 语句块区域
printf("语句块区域num=%d \n",num);
}
printf("函数域num=%d \n",num);
// printf("文件域num=%d \n",::num); // C++特性
}// 一个程序可以出现相同名称的变量 使用“::”来获取全局变量
链接:多个目标文件合并成一个可执行文件(extern)
一个目标文件使用另外一个文件中的标识符,使用关键字extern
(局部变量和函数形参)自动变量定义时,系统位置开辟空间,自动变量离开作用域时,系统自动回收所占空间。(生命周期:声明变量开始到函数调用结束)
多次调用同一函数,函数内的局部变量与函数形参,将会在每次调用的时候,都自动创建与回收
全局变量:编译时开辟空间,程序结束的时候回收空间。(生命周期:整个程序运行期间)
static:静态局部变量,静态全局变量
静态局部变量:生命周期(创建开始—程序结束),函数返回后,静态局部变量的内存不会被回收;
当下一次调用该函数时,静态局部变量依然保持上一次调用退出的值
作用域不变,依旧在函数内部
保存在静态存储区
与普通局部变量比较:作用域不变,生命周期延长
普通全局变量:生命周期(创建开始—程序结束),当前目标文件有效、其他目标文件也有效(extern)
静态全局变量:生命周期(创建开始—程序结束),也存储在静态存储区,作用域缩小:仅限于当前目标文件
函数的参数与返回值
//传值
void func1(int y){
y+=3;
}
//传指针(指针的值改变)
void func2(int *x,int *y){
int *temp=x;
x=y;
y=*temp;
}
//传指针(指针指向地址内的值改变)
void func3(int *x,int *y){
int temp=*x;
*x=*y;
*y=temp;
}
/*
void func4(int &x,int &y){
int temp=x;
x=y;
y=temp;
}
*/ // 因为x y 是num1和num2的引用,所以修改x,y的本质就是修改num1,num2
int main(int argc, const char * argv[]) {
/* 函数传参的三种传递方式
// 1.值传递:单向传递,把实参的值做一份拷贝赋值个形参,形参实参互不影响
2.传指针:特殊的传值方式,两个指针指向同一块空间(指针的值改变、指针指向地址内的值改变)
3.传引用:形参是实参的一个别名(形参就是实参),操作形参就是操作实参
函数返回值3种方式(值返回、指针返回、引用返回)
值返回:int ,float … func(){} 与定义的函数类型保持一致
***************** 当函数以值返回形式,编译器会创建一个临时的变量来接收返回值**************
指针返回:int * func6(){
return p;
}//