同理:对于结构体全局变量

struct A
{
       int a ;   
} sTest;
int main(void)
{
       return sTest.a+3 ;
}

  函数也返回3。

  实验结论:

  在C语言中,全局变量是在编译期完成初始化的。

  (在本实验中我们没有使用I/O函数把结果打印出来,因为I/O函数的调用之前必须要初始化内存中的某堆空间,而这个工作是由main函数之前的mainCRTStartup函数来做的。而我们设置让编译器跳过这个函数,故会在运行时出错。)

  实验二:

  C++语言环境下

  实验准备:

class A
{
public:
       int a ;   
       A(){a=10;}
       ~A(){}
} ;
A cTest ;
 
int main(void)
{
       return cTest.a ;
}

  结果预测:

  这样,如果函数返回的是0,则说明此全局变量是在编译期被初始化为0了,如果函数返回的是其它数字,则说明此全局变量是在程序运行时,main函数运行前进行的初始化。

  实验结果:

  在编译器中设置入口函数为main,主函数返回一个其他值

  在编译器中设置入口函数为默认,主函数返回值为10

  实验结论:

  在C++中,类(class)的全局变量是在程序运行期,main函数开始之前,调用类的构造函数完成初始化的。

  同理:

  把C中的代码放到C++下实验

int a ;
int main(void)
{
       return a+3 ;
}