yizhongqishi的线上错题本_c/c++篇

来源:互联网 发布:java println 编辑:程序博客网 时间:2024/04/30 06:24

临近春招面试,这里就用来保存在牛客上总结的错题和jing~yan


关于sizeof(Class)的问题:

首先要说的是,sizeof是C/C++的关键字,并不是java的关键字,在招商银行的笔试中犯了傻……

进入正题,经常配合malloc使用的sizeof()一般是求出目标所占内存大小,对于基础变量来说没有什么需要注意的,无非就是byte为1,char为1之类的(要注意的是指针在32bit下为4,在64bit下为8),但是假如是求结构体的时候,就需要考虑字节对齐的问题,简单就是说找出结构体所包含的所有类型大小的最小公倍数,并且内存中变量的起始位置必须是变量占用内存大小的整倍数。那么要是sizeof(Class)这种情况下呢?不妨举例说明:

<pre name="code" class="cpp"><pre name="code" class="cpp">Class Test{  public:  Test(){}  ~Test(){}  void ttt(){}};

这样的类没有成员变量,被认为是空类,此时sizeof(Test)的求出的结果为1;

但是加入类中包含虚函数

Class Test{  public:  Test(){}  ~Test(){}  virtual void ttt(){}};
则此时sizeof(Test)为4;

假如所求的类不是一个空类,如

<pre name="code" class="cpp">Class Test{  public:  Test(){}  ~Test(){}  virtual void ttt(){}  private:    char ch;    int a;    short sh;};

则此时先类似结构体字节对齐求出非静态成员变量的总大小,然后加上虚函数的4,此时sizeof(Test)结果为16其中;

关于C/C++条件语句错误用了赋值语句:返回的应为所赋值,例如:

for (int i=-1;i=0;i++){cout<<"fuck me"<<endl;}
则执行0次循环,因为中间的判断条件为false(返回赋给i的0);

void* malloc(unsigned size);
void* realloc(void* ptr, unsigned newsize);  
void* calloc(size_t numElements, size_t sizeOfElement); 
都在stdlib.h函数库内,它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL.
(1)函数malloc()
   在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长度,返回该区域的首地址.
(2)函数calloc()
   与malloc相似,参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,即在内存中申请numElements*sizeOfElement字节大小的连续地址空间.calloc在动态分配完内存后,自动初始化该内存空间为零
(3)函数realloc()
   给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度.

memset(void *s,int ch,unsigned n);


功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,
  块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作


在java 中,声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度.



HttpServletRequest的功能介绍:



在C++中,冒号(:)只是在构造函数中用来给形参赋值


引用,const成员变量,基类构造函数 一定要通过初始化列表来实现。

空对象占8个字节 
有数据成员的话,你把数据成员按基本数据类型和对象引用分开统计,也就是说需要字节对齐两次。 
基本数据类型按byte/boolean=1,char/short=2,int/float=4,long/double=8,对象引用按每个4字节,保证8字节的对齐



0 0
原创粉丝点击