1>static
首先static本身只是一个关键字,他可以修饰一些变量和函数,那么我就总结一下static的作用。
a、static修饰局部变量
周所周知局部变量的生命周期就是在函数中的内部,出了函数之后就不能再用,用static修饰的局部变量就存储在静态存储区,这样的话就增加了局部变量的生命周期,在整个文件中都能进行使用,值得一提的是用static修饰的局部变量只初始化一次,再次执行的时候不会进行初始化。
b、static全局变量
修改的是变量的导出属性,被static修饰的全局变量只能在当前文件中使用,不能被extern再将这个属性导出,一般的全局变量是可以用extern导出在其他文件中使用的。
c、static修饰函数
和修饰全局变量一样,修改的是函数的导出属性,进而实现封装的思想,让这个函数只能在当前文件中调用。就像是一个类,如果用private修饰的函数只能是类的私有函数,这里用static修饰的函数 是属于文件的。这里就可以看出,其实c完全可以实现面向对象的一些思想的。
const修饰符
对于这个修饰符我首先说点题外话
int a;这个a表示是一个int类型变量,因为a是被int修饰的。
int *a;我们都知道a是一个int类型的指针,关键是你怎么理解的。
我谈一下我的理解,我理解这样int (*a); 这样就很容易理解 *a是一个整体,是一个int类型的 而(int *)a 这样的话,a的类型就是int * 就是一个指针,这个思想可以让你很容易的去理解指针。。。
下面谈整体,面试中很多会问到const,这个关键字很容易理解,就是声明定义一个常亮。
但是会问到一些比较变态的问题,就看你的理解,比如:
const int a;
const int *a;
int const *a;
int * const a;
其实这个主要就是const的位置,记忆起来的也很容易,就是看const修饰的是谁;
const int a; const 修饰的是 a 而a是int类型,所以这句话就是生命一个常量a;
const int *a;这个const修饰的是 *a,这个声明一个指向常量的指针, const 修饰的是*a,所以*a是不可以变的 ,a是可以变得。
int const *a;这个和上面是一样的,const 修饰的是*a,所以也是一个声明一个指向常量的指针a、。
int * const a;这个const修饰的是a,a是一个指针,所以这个声明的是一个常量指针、指针的指向是不可以变的,但是内容是可以变得。
简单的总结了一下,大家有什么意见,欢迎大家指正。 |
|