1. C对象(存有值的内存) 有4种存储期:静态、线程、自动、动态分配存储期。
静态:对象在程序执行期间一直存在
线程:对象从被声明到线程结束一直存在
自动:相当于一个暂时存储的内存,调用函数时候需要时候分配给变量,调用结束后释放刚才为变量分配的内存
动态:
2.块作用域:
块:用两个分括号包含的部分
块作用域:声明在括号内的变量具有块作用域,简而言之就是在这个区域内有效;(也包括形参(虽然不在括号内))
3.让块作用域变量也能具有静态存储期------static
块作用域中的变量存储期属于自动类型,即调用这个函数的时候被创建,离开时候被销毁,例子:
void love()
{
int a ;
...........
return 0;
}
这个块中,当调用这个函数时候 变量a被分配内存,当退出时候被销毁,再次调用时候再次初始化赋值,而如果改成:
static int a;
则a为静态变量,在程序离开他们所在的函数后不会消失。
即再次调用这个函数时候保存的是上一次调用后a值,即不会将a重新初始化赋值。但是注意亮点:
①形参中不能使用static,如int work(static int x)
②只有在执行块内代码时,才能通过标识符访问!!!!我之前还想可以在其它函数调用这个变量×
4. 声明在块或者函数头中的任何变量都属于自动存储类别,为了强调不要改变这个变量的类别可以使用关键字auto
auto int a;
5. 如果一个源代码文件使用的外部变量定义在另一个源代码文件中,则必须使用extern在该文件中声明该变量
extern char a;/*如果a被定义在另一个文件*/
int main (void)