面试的两个题目,不知道怎么答。
1、这个程序实现什么功能??
void foo(char *a, char *b, int len)
{
switch(len &0x7){
default:
while(len> 7){
len-=8; *b++ = *a++;
}
case7: *b++ = *a++;
case6: *b++ = *a++;
case5: *b++ = *a++;
case4: *b++ = *a++;
case3: *b++ = *a++;
case2: *b++ = *a++;
case1: *b++ = *a++;
}
}
2、指出这个程序有什么错误
void doubleArray(string *&array, int size)
{
const string *old = array;
array = new string[2*size];
memcpy(array, old, size*sizeof(string));
del[] old;
size*=2;
}
[解决办法]
关于第一个问题:
(1)default能够放到case的前面吗?我没有试过,但是没有必要耍这种没有意义的伎俩。
(2)看不出是什么功能,应该有人知道的。等待高手。
关于第二个题:
(1)const string *old = array; const指针不能指向非const对象。
(2)del[] old; old和array指向同一块内存,这样会删除array的内存,如果要用的话,这个语句应该放到new的前面去。
(3)memcpy(array, old, size*sizeof(string));的使用,第三个参数应该是从源串中读取的字符个数,而不是大小。
由于不知道这个题目的目的是什么,所以不好修改。
小弟的个人见解,应该还有其他地方有错误吧。