面试求职经典问题.docx
- 文档编号:11478348
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:43
- 大小:33.49KB
面试求职经典问题.docx
《面试求职经典问题.docx》由会员分享,可在线阅读,更多相关《面试求职经典问题.docx(43页珍藏版)》请在冰豆网上搜索。
面试求职经典问题
经典问题:
double*(*a)[3][6];
cout< cout< cout< cout< cout< a是一个很奇怪的定义,他表示一个指向double*[3][6]类型数组的指针。 既然是指针,所以sizeof(a)就是4。 既然a是执行double*[3][6]类型的指针,*a就表示一个double*[3][6]的多维数组类型,因此sizeof(*a) =3*6*sizeof(double*)=72。 同样的,**a表示一个double*[6]类型的数组,所以sizeof(**a)=6*sizeof(double*)=24。 ***a就表示其中的一个元素,也就是double*了,所以sizeof(***a)=4。 至于****a,就是一个double了,所以sizeof(****a)=sizeof(double)=8。 3.格式的写法 sizeof操作符,对变量或对象可以不加括号,但若是类型,须加括号 4.使用sizeof时string的注意事项 strings="hello"; sizeof(s)等于string类的大小,sizeof(s.c_str())得到的是与字符串长度。 5.union与struct的空间计算 总体上遵循两个原则: (1)整体空间是占用空间最大的成员(的类型)所占字节数的整倍数 (2)数据对齐原则----内存按结构成员的先后顺序排列,当排到该成员变量时,其前面已摆放的空间大小必须是该成员类型大小的整倍数,如果不够则补齐,以此向后类推。 。 。 。 。 注意: 数组按照单个变量一个一个的摆放,而不是看成整体。 如果成员中有自定义的类、结构体,也要注意数组问题。 例: [引用其他帖子的内容] 因为对齐问题使结构体的sizeof变得比较复杂,看下面的例子: (默认对齐方式下) structs1 { chara; doubleb; intc; chard; }; structs2 { chara; charb; intc; doubled; }; cout< cout< 同样是两个char类型,一个int类型,一个double类型,但是因为对界问题,导致他们的大小不同。 计算结构体大小可以采用元素摆放法,我举例子说明一下: 首先,CPU判断结构体的对界,根据上一节的结论,s1和s2的对界都取最大的元素类型,也就是double类型的对界8。 然后开始摆放每个元素。 对于s1,首先把a放到8的对界,假定是0,此时下一个空闲的地址是1,但是下一个元素d是double类型,要放到8的对界上,离1最接近的地址是8了,所以d被放在了8,此时下一个空闲地址变成了16,下一个元素c的对界是4,16可以满足,所以c放在了16,此时下一个空闲地址变成了20,下一个元素d需要对界1,也正好落在对界上,所以d放在了20,结构体在地址21处结束。 由于s1的大小需要是8的倍数,所以21-23的空间被保留,s1的大小变成了24。 对于s2,首先把a放到8的对界,假定是0,此时下一个空闲地址是1,下一个元素的对界也是1,所以b摆放在1,下一个空闲地址变成了2;下一个元素c的对界是4,所以取离2最近的地址4摆放c,下一个空闲地址变成了8,下一个元素d的对界是8,所以d摆放在8,所有元素摆放完毕,结构体在15处结束,占用总空间为16,正好是8的倍数。 这里有个陷阱,对于结构体中的结构体成员,不要认为它的对齐方式就是他的大小,看下面的例子: structs1 { chara[8]; }; structs2 { doubled; }; structs3 { s1s; chara; }; structs4 { s2s; chara; }; cout< cout< cout< cout< s1和s2大小虽然都是8,但是s1的对齐方式是1,s2是8(double),所以在s3和s4中才有这样的差异。 所以,在自己定义结构体的时候,如果空间紧张的话,最好考虑对齐因素来排列结构体里的元素。 posted@2006-09-1121: 42顽主阅读(493)|评论 (1)|编辑收藏 realloc更改已配置的内存空间 ________________________________________ 相关函数: malloc,calloc,free,brk 表头文件: #Include 函数定义: void*realloc(void*ptr,size_tsize) 函数说明: 参数ptr为指向先前由malloc()、calloc()、realloc()所返回的内存指针,而参数size()为新配置的内存大小,其值可比原内存大或小。 若小,内存内容并不会改变,且返回指针为原来内存启起地址;但若大,则realloc()不一定会返回原先的指针,原先的内容虽不会改变,但新多出的内存则未设置初值。 若是参数ptr指针为NULL,则调用相当于malloc(size);若参数size为0,此调用相当于free(ptr) 返回值: 成功返回指针,失败返回NULL 范例: #Include main() { char*ptr1=malloc(10); char*ptr2; memset(ptr1,'A',10); *(ptr1+10)='\0'; printf("beforerealloc: ptr=%x[%s]\n",ptr1,ptr1); ptr2=realloc(ptr1,40960); printf("afterrealloc: ptr=%x[%s]\n",ptr2,ptr2); } posted@2006-09-1010: 47顽主阅读(205)|评论 (1)|编辑收藏 melloc()free()与newdelete mallocfree 与 newdelete (1)分配空间时,malloc只给变量或对象(数组)在内存中申请足够的空间,而没有创建类的对象。 而new则构造完整的对象 (2)释放内存时,free只消除掉该对象指向的内存,而原对象没有调用析构函数。 delete在每个对象释放前都要调用析构函数。 格式: char*p=(char*)malloc(10*sizeof(char)); free(p); char*p=newchar[10]; delete[]p; //其中delete格式中[]表示删除相应的对象数组;而缺少[]时表示删除单一的对象。 posted@2006-09-1010: 07顽主阅读(85)|评论(0)|编辑收藏 c++面试题 1.是不是一个父类写了一个virtual函数,如果子类覆盖它的函数不加virtual,也能实现多态? virtual修饰符会被隐形继承的。 private也被集成,只事派生类没有访问权限而已 virtual可加可不加 子类的空间里有父类的所有变量(static除外) 同一个函数只存在一个实体(inline除外) 子类覆盖它的函数不加virtual,也能实现多态。 在子类的空间里,有父类的私有变量。 私有变量不能直接访问。 -------------------------------------------------------------------------- 2.输入一个字符串,将其逆序后输出。 (使用C++,不建议用伪码) #include usingnamespacestd; voidmain() { chara[50];memset(a,0,sizeof(a)); inti=0,j; chart; cin.getline(a,50,'\n');
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面试 求职 经典 问题