代码改变世界

随笔分类 -  笔试面试

程序员面试宝典三

2012-08-22 10:27 by javaspring, 215 阅读, 收藏,
摘要: 1、基类的析构函数声明为virtual的好处? 假设基类CBase,其派生类CChild,有如下代码: CBase *pBase=new CChild; //new CChild构造对象时,先调用基类CBase的构造函数,然后调用CChild的构造函数,析构时顺序应该恰好相反。 delete pBase; 如果CBase的析构函数定义为virtual,那么pBase指针被撤销时,就会先调用CChild的析构函数,然后调用CBase的析构函数。 而如果CBase的析构函数不是virtual,那么只会调用CBase'的析构函数,从而导致内存泄漏。2、构造函数为什么不可以声明为virtual 阅读全文

程序员面试宝典二

2012-08-17 17:52 by javaspring, 230 阅读, 收藏,
摘要: 1、下面程序结果 unsigned int a=0xfffffff7; unsigned char i=(unsigned char)a; //发生截断 char *b=(char *)&a; //指针转换 printf("%08x,%08x\n",i,*b); //000000f7,fffffff7int f(int x,int y) { return (x&y)+((x^y)>>1); //&操作是取相同的位,结果是相同位两者和的一半,^操作是取不同的位,右移相当于除以2,结果是不同位两者和的一半 }2、C++调用被C编译器编译后的函 阅读全文

程序员面试宝典一

2012-07-30 11:09 by javaspring, 319 阅读, 收藏,
摘要: 1、int i=i; ? 首先声明一个变量i,然后将变量i的值(未初始化)赋值给自己2、下面代码的意义void func(int x,int &count) { while(x) { count++; x=x&(x-1); //求将x转换为二进制后包含1的个数 } } 求一个整数转换为二进制之后包含多少个13、printf在VC6.0下是自右向左运算的(好像跟编译器有关) int arr[]={6,7,8,9,10}; int *ptr=arr; *(ptr++)+=123; //*ptr++123; ptr++; pr... 阅读全文

大数乘法运算

2012-07-30 10:37 by javaspring, 245 阅读, 收藏,
摘要: 1、直接进行整型大数之间的乘法很容易导致数据存储溢出,可以采用数组存储计算得到的每一位#include <stdio.h> #include <stdlib.h> int main() { int n; int a[100], k=0, i, j; //定义相关变量,数组 while(1) //自行判断决定循环执行次数 { if(n==0) break; printf("请输入要求的阶乘的数、输入0结束:"); scanf("%d",&n); //输入阶乘数n printf(" %d!=",n); .. 阅读全文