我们可以看出来c2需要间接寻址,因为c2存在于堆中,而c1则不需要,直接放到sp栈中
void testClass(){在类中,其内存分布与struct一样,
class MyTest{
public:
char * dd;
void SetX(double mx,char my, char* mz){
x= mx;
y= my;
z= mz;
f= 32.23;
}
protected:
float f;
char e;
private:
double x;
char y;
char * z;
char * dz;
};
char addda[] = "atttd";
MyTest myTest;
myTest.SetX(1.1,'2',addda);
}
上面的
dword_2858其实就是
0x9999999A, 0x3FF19999
,不同的是因为要放到double中,参数是double类型的,所以需要放到64位中,
其中setText方法就是
在编译器中,有多少对象,就有多少个类的成员变量,即为成员变量随着类的对象生成而生成,但是方法就有一个~
void testUnion(){共同体union的多个变量在同一个内存区域里面,
typedef union Student{
int age;
float ddd;
char * monday;
char tuesday;
short dsd;
}Student;
Student * dd = (Student * )malloc(111* sizeof(Student));
dd->age = 1;
dd->dsd = 12;
(&dd[2])->age= 2;
Student ccd[2322];
ccd[1].age=2;
ccd[1].ddd=3;
(&ccd[2])->ddd=21.21;
}
共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。
在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。
void testEnum(){
enum Days{sunday,monday,tuesday};
enum Days theDay;
theDay = (enum Days)(0);
if (sunday == (theDay)){
printf("eee");
}
}
枚举在存储过程中明显也是0,1,2,3.。。的样子。
注意枚举的用法。