假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?
1 #include <stdio.h> 2 int main(){ 3 long long a = 1, b = 2, c = 3; 4 printf("%d %d %d\n", a, b, c); 5 return 0; 6 }
所以小端(低地址在前),结果1,0,2
知识点:函数参数入栈由右向左;
栈地址从高到低
2. static的使用;
A不正确,const static 可以在类内初始化,其余情况不行
3. new 和delete的原理
4.拷贝构造:
5.类指针并不会调用构造函数
6.chu'shi初始化列表
7.拷贝构造:返回A的时候会调用拷贝构造
8.拷贝构造函数调用次数
共7次
9.
成员列表初始化:static不可以放类内初始化,除非const static ;
第三条:无默认构造函数,必须在初始化列表处初始化
10.加号之前必须是对象,在加号之后的会自动转换为对象
11. 数组指针与指针数组
12. 结构体对齐计算方法:
- 首先知道最小对齐数(64位 vs为8,linux为4)
- 成员在结构体中的偏移量(相对于起始内存地址)能否被min(类型大小,最小对齐数)整除
- 最后全部大小能否被min(成员最大数据类型大小,最小对齐数)整除
13. 虚函数表:在常量区
a=200 b=10
class Test{
public:
int a;
int b;
virtual void fun() {}
Test(int temp1 = 0, int temp2 = 0)
{
a=temp1 ;
b=temp2 ;
}
int getA()
{
return a;
}
int getB()
{
return b;
}
};
int main()
{
Test obj(5, 10);
// Changing a and b
int* pInt = (int*)&obj;
*(pInt+0) = 100;
*(pInt+1) = 200;
cout << "a = " << obj.getA() << endl;
cout << "b = " << obj.getB() << endl;
return 0;
}
解:
需要考虑虚函数表,指向虚函数表的指针在32位系统下占用4个字节,其地址分布在整个类成员变量的地址的首部,接下来就是变量a的地址、b的地址。
当将test对象obj赋给指向整型的pInt后,指针pInt指向了地址的首部也就是虚函数表指针,所以*(pInt+0)=100改变的是虚函数表的值,接下来*(pInt+1)=200改变的是变量a的值,变量b没有变换。
原文链接:https://blog.csdn.net/jjjstephen/article/details/109198009
14.多态