您的位置:首页 > 其它

笔试题

2016-05-24 21:28 337 查看
1.请写出下面代码的输出结果

char* getStr(char* p) {
p = (char*)malloc(20);
strcpy(p, "hello");
return p;
}
int main()
{
char* p1 = "Hello World";
char* p2 = getStr(p1);
cout << p1 << endl;
cout << p2 << endl;
return 0;
}</span>


这道题目考察的是指针传递和值传递的区别,我做的时候被误导了,觉得传递指针了值肯定会发生变化啊!!

想当然的写下

p1 = hello;

p2 = helle;

结果很自然的,我面试失败了,当然不是这一题的原因,还有其它,下面再讲。

再回到这到题目,先说出它的输出结果

p1 = Hello World

p2 = hello

原因是对指针的认识还是不够透彻,说到底指针也是一种数据类型,虽然传递的是指针,但是他本身就是指针,所以还是相当与值传递,如果把代码改成下面这样,就是输出第一种结果了:

char* getStr(char** p) {
*p = (char*)malloc(20);
strcpy(*p, "hello");
return *p;
}
int main()
{
char* p1 = "Hello World";
char* p2 = getStr(&p1);
cout << p1 << endl;
cout << p2 << endl;
return 0;
}


阅读代码,写出结果:

int main()
{
char m = 0;
for(int i = 0; i < 128;++i)
m += i & 3;
printf("%d\n", m);
}


如果你和我想的一样,结果是192的话,那么,恭喜你,你错了!!别忘了char类型的表示范围,-128 ~ 127.

结果是-64.

3.把字符串的小写字母改成大写字母,不能调用库函数。这个比较简单,不说了。

4.判断一个数是不是2的幂,比如, 2^3 = 8, 2^4 = 16,不能使用for, while,我使用的是一个递归调用,不是很难。

bool get(int num) {
if(num == 1)<span style="white-space:pre">		</span>// 2 的0次方是1
return true;
if(num %2 == 0)
get(num / 2);
else
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: