C++中当创建一个对象时会自动调用它的构造函数,但是如果程序中有用到goto语句跳过或者对象是在swith中声明,在编译的时候就会报错,那么,在C++程序中开始声明的对象
和程序中间声明的对象都是什么时候分配的空间(是在系统载入程序的时候就将程序中所有要用到的变量和对象一起分配么,还是走到定义处再分配),如果程序运行的时候跳过的定义处,
在下面还能使用么?
C++中结构体有:enum(枚举),struct(结构),union(联合),class(类)。当你定义一个结构体类型时,是不存在内存分配的。譬如:
struct student
{
char *name;
int age;
};
这个时候仅仅是通知编译器有了student这种struct类型,没有内存分配。只有当声明一个对象时,即student s;时,编译器才会给变量s分配内存,且内存大小为student结构体大小,
可以sizeof(s)求出为8。
另外,程序都是通过编译器编译成功后生成目标文件,才能执行的。编译器就是按顺序来给变量分配内存的,当然是走到变量声明处,才会给它分配内存。如果goto语句跳过变量声明,
程序会报错,且看下面例子:
#include<iostream>
using namespace std;
int main()
{
goto b;
int i=10;
b:
cout<<i<<endl;
return 0;
}
很显然,编译器无法给i初始化,故编译出错。
另外,变量又分为全局变量和局部变量,又有static,auto等等之分。全局变量是在编译开始就分配内存,且放在静态存储区。局部变量则是走到该变量声明处才分配内存,且放在栈中,
static也是指该变量放在静态存储区。