- 自己整理了一些常见的面试题,频率挺高的都是,而且感觉这里这些基础的东西都会问,自己过几天也要面试了,所以发上来让大家一起看看,有什么错误的地方望提醒我纠正。
- 32位数据类型以及sizeof大小、
- char:1; short int:2; int:4; long:4; long long:8; float:4; double:8;bool:1
- 指针类型的都是4(虚函数也是4,因为它是靠虚指针管理的)。sizeof结构体的运算都是内存对其的知识点。(或者可以按照8的倍数去算)。
- 对类来说:空类:1个。若类中有虚函数:保存了一个指针(vptr)指向虚表,所以虚函数四个。继承的时候要把基类的内存分配的大小也算上。
- int arr[6]={};sizeof(arr)=4*6;sizeof (array) / sizeof (int) 这个是返回数组元素个数
详见:http://blog.csdn.net/Hello_Hwc/article/details/41170719
- 这里也可能考到继承中的sizeof的大小
-
View Code
#include<iostream> #include<stdio.h> #include<cstring> using namespace std; class A { public: A() : p1(1), p2(2), p3(3) {} //当基类中含有虚函数的时候,含有多个虚函数都是通过一个虚函数指针来控制一个大的虚函数表的,所以所有的虚函数合起来就都是4的大小(32位的操作系统中) virtual int a(){} virtual int b(){} public: int p1; private: int p2; protected: int p3; }; class B: public A {}; int main() { A a; std::cout << *(int *)&a << std::endl; std::cout << *((int *)&a + 1) << std::endl; std::cout << *((int *)&a + 2) << std::endl; B b; std::cout << *(int *)&b << std::endl; std::cout << *((int *)&b + 1) << std::endl; std::cout << *((int *)&b + 2) << std::endl; cout<<sizeof(B)<<endl; }
-
相关文章: