第一章:关键字
知识点一:最“小气”的关键字----static
关键字static在C语言中主要有2个作用:
作用一:修饰变量
变量又分为全局变量和局部变量,但它们都存在内存的静态区;
修饰变量的类型 | 作用域 |
静态全局变量 | 小气证据: 1.仅限于被定义的文件中,其他文件即使使用了extern声明也没法使用它。 2.在定义static 变量处前面的那些代码行也不能使用它,想要使用就得在它的前面再加上extern **** (对于这么恶心的关键字修饰的变量,最好的方法就是:直接在文件顶端定义) |
静态局部变量 | 小气证据: 1.在函数体里面定义的,就只能在这个函数里用,同一个文件中的其他函数也不能调用它。 2.由于被static修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值也不会被销毁,函数下次使用时,仍然能用到这个值。 |
练习:看下面这段代码
static int j ;
void fun1 (void)
{
static int i=0;
i++;
}
void fun2 (void)
{
j =0;
j++;
}
int main()
{
int k=0;
for(k=0; k<10; k++)
{
fun1();
fun2();
}
return 0;
}
请考虑:i和j的值分别是什么?为什么?
答案: i=10 ;j=1; (提示:i的值只被初始化一次,而j是全局变量,每次调用到函数都被初始化 )
作用二:修饰函数
小气证据: 函数前加static使得函数成为了静态函数---即指对函数的作用域:仅局限于本文件(所以又称内部函数)
好处:不同人编写不同的函数时,不用担心自己定义的函数是否与其他文件中的函数同名;
知识点二.最冤枉的关键字---sizeof
(一)经常被人误认为是函数......我也以为sizeof是函数耶!!!
sizeof是关键字不是函数,下面我们利用编译器来证明它的“清白”---验身!看下面例子:
int i =0
A. sizeof ( int ) ; B.sizeof (i); C.sizeofint ; D.sizeof i ;
在32位系统下A、B 的值为:4 ,那么C的值呢?D的值呢?
在32为系统下,通过Visual C++ 6.0或任意编译器调试,D的结果为4,没有括号居然也行!而函数名后面没有括号是不行的,所以证明:sizeof 真的不是函数耶!
再看C编译器提示出错,sizeof int 表示什么?明显不正确,我们可在 int前加unsigned 、 const等关键字,但不能加sizeof.
【记住:sizeof 在计算变量所占的空间大小时,括号可以省略,如:sizeof i;而计算类型(模子)大小时不能省略:sizeof (int)】