171108-函数作用域和存储特性学习【连续第十六天】

来源:互联网 发布:apk优化 编辑:程序博客网 时间:2024/05/21 01:46

今天终于又开始有下一步进度了,今天学习了一下存储特性;

先是自动存储,这个其实就是我们平时直接写的int ...,double ..之类的一些代码,而自动存储的特殊性就是当他进入块时才生成,而结束块的时候

他的存储空间就会被撤回;

下个是静态存储,关键字是static和extern,静态存储则是在程序一开始就会被执行,但并不能在整个程序中去使用,用static定义的局部变量则只能

再定义该变量的函数体中使用,而static在第一次使用时就会自动被初始化一个值0,而在结束一次运行后,static变量还是上一次退出后的值;

注:static变量在程序中只会被执行一次,且只在第一次进入时执行,此后在进入时则不会在执行,调试中的显示则是会跳过该语句;

试了一个例题,但好像我的这个编译器无法显示静态变量

这里第一次运行时a才会被分配空间,而b则在一开始就存在存储空间,且被赋值为1;

然后第一次调用输出a=1;b=2;a+b=3;

第二次时原先a的空间已经被撤销,故原值不存在,在下次执行时才会被再次赋值,但b则会保留上一次的2

在运行时a=1;b=3;a+b=4;

在下面是对作用域学习

函数原型作用域,就是在我们声明函数时的语句,此时的形参时可以被省略的,原因就是此时的作用域是仅限于这一个语句的,在此后的语句中是不会被使用的;

块作用域,即一对大括号内的语句则会构成一个块作用域,其中允许嵌套另外的块;

而不在同一块中的相同变量是不会被认为是重复定义的;

下面是对作用域的例题的学习

此处虽然变量名都相同但并不会报错,因为外层a的作用于是整个大的块,而内层a则只是一个内嵌的块中的局部变量;运算时会有一个局部优先原则

目标:完成书后练习,复习所有函数内容

原创粉丝点击