全局变量和局部变量的初始化时间
我们定义全局变量,如果不赋值,编译器给他赋上0.如果定义了值,就在编译的时候就确定下来了,这个值是编译器根据我们的语句赋给它的.而不程序中指令赋给它的!
所以一定要注意,全局变量和静态变量的初始化时间实际上是在程序的编译过程中确定的,而不是在程序运行过程。
但在C和C++中静态局部变量的初始化节点又有点不太一样。在C中,初始化发生在代码执行之前,编译阶段分配好内存之后,就会进行初始化,所以我们看到在C语言中无法使用变量对静态局部变量进行初始化,在程序运行结束,变量所处的全局内存会被全部回收。而在C++中,初始化时在执行相关代码时才会进行初始化,主要是由于C++引入对象后,要进行初始化必须执行相应构造函数和析构函数,在构造函数或析构函数中经常会需要进行某些程序中需要进行的特定操作,并非简单地分配内存。所以C++标准定为全局或静态对象是有首次用到时才会进行构造,并通过atexit()来管理。在程序结束,按照构造顺序反方向进行逐个析构。所以在C++中是可以使用变量对静态局部变量进行初始化的。
const变量
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
int a = 10, b = 20;
const int *p1 = &a;
// p1 = &b; ok *p1 = b; error
int * const p2 =&a;
// p2 = &b; ok *p2 = b; error
int const *p3 = &a;
//同上
const int * const p4 = & a;
//both error
}