操作系统为C++程序的运行所分配的内存空间为5个区域
1,栈区:存放局部变量;分配栈区是不处理内存,即变量取随机值。(先进后出)
2,堆区(自由存储区):存放与指针相关的动态数据;分配堆区时动态变量也取随机值
3,全局数据区:存放全局数据和静态数据。分配该区时内存全部清0,结果变量的所有字节都自动初始化为0
4,文字常量区,里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多)
4,程序代码区:存放程序代码。
内存泄漏:当new或malloc()返回的指针值丢失,则所分配的自由存储区无法回收,这种现象就叫做内存泄漏。
C语言中变量的定义一般都需要指定:存储类别和数据类型。但存储类别可以选择默认。
C++中定义局部变量不加auto,全局变量(外部变量)不加extern.
extern int c;
int main()
{
c=3;
cout<<c<<endl;
return 0;
}
想法是想定义一个外部变量,然后将其赋值为3;担编译器将第一行解释为将已经在本文件或其他文件中定义的外部变量在此引用。所以该程序的错误原因是没有定义外部变量c;
注意:直接在函数外边写 c=3;是错误的;例如:
int c;
c=3;
int main()
{
cout<<c<<endl;
return 0;
}
错误提示:c 不能命名一个类型;所以只能int c=3;
局部变量的作用域和生存期为该局部变量所在的块域:{}
静态局部变量作用域为块域{},生存期为该变量定义到程序结束。以后每次使用该静态局部变量都继承上次调用后的值。
外部变量作用域可以是本文件(若在该变量声明的上方调用也用extern)和外部文件(需要extern),生命周期与作用域一致。
静态外部变量的作用域仅为本文件,生命周期与作用域一致。
注意:在将全局变量作用域进行扩展时,C++中必须用extern int c,用extern c 会报错。C中用extern c会警告。
静态函数(内部函数):返回之前加static:该函数只能在该文件中引用。
一般函数均为外部函数。