引言:包括百度、中兴在内的很多公司都曾在笔试面试中出过下面题目
区分三种变量的特点,如果只看声明位置和访问范围,肯定不够深刻的,需要进一步理解在内存中的不同。所以,这里我们来复习总结一下三种变量的特点,区分巩固基础知识。
注意
例如,我们在A类中声明和定义一个全局变量lastNum,类似如下
float lastNum;//仅声明
float lastNum = 10.0;//声明和定义
要注意的是,全局变量可以在许多地方声明 为extern
,但定义(赋初值)只能一次。而上面的代码既声明,也定义了一个全局变量lastNum。其中,定义的时候并不需要extern专门来修饰。倒是在其他不需要定义该全局变量的地方,需要extern来修饰该全局变量,声明要调用外部变量了。
用法1
extern float lastNum;
这样声明。这样就告诉系统,我要访问其他文件中定义的这个全局变量了。注意点:此时,B类通过extern
调用A类声明的全局变量时,B类中并不需要导入A类,例如类似import A.h
等等。A.m 中定义和声明全局变量
image.png
B.m 中extern
并调用全局变量
image.png
用法2.
extern float lastNum;
这样的声明。在需要在B类中导入A类头文件,就不需要在B类中专门做extern float lastNum;
这样的声明了。这样就告诉系统,其它访问A文件中定义的这个全局变量了,导入A类即可使用。A.m 中声明全局变量
image.png
A.h中extern
全局变量
image.png
B.m中import
A.m类并调用全局变量
image.png
static float lastNum;
static float lastNum = 10.0;
- (float)caculateResult{
float a = 1.0;
float b = 2.0;
return a + b;
}
堆和栈首先要清楚的是程序对内存的使用分为以下几个区: