笔试题
2016-05-24 21:28
337 查看
1.请写出下面代码的输出结果
这道题目考察的是指针传递和值传递的区别,我做的时候被误导了,觉得传递指针了值肯定会发生变化啊!!
想当然的写下
p1 = hello;
p2 = helle;
结果很自然的,我面试失败了,当然不是这一题的原因,还有其它,下面再讲。
再回到这到题目,先说出它的输出结果
p1 = Hello World
p2 = hello
原因是对指针的认识还是不够透彻,说到底指针也是一种数据类型,虽然传递的是指针,但是他本身就是指针,所以还是相当与值传递,如果把代码改成下面这样,就是输出第一种结果了:
阅读代码,写出结果:
如果你和我想的一样,结果是192的话,那么,恭喜你,你错了!!别忘了char类型的表示范围,-128 ~ 127.
结果是-64.
3.把字符串的小写字母改成大写字母,不能调用库函数。这个比较简单,不说了。
4.判断一个数是不是2的幂,比如, 2^3 = 8, 2^4 = 16,不能使用for, while,我使用的是一个递归调用,不是很难。
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; }
相关文章推荐
- hdu 2023 亲和串 --(使用strstr(),strcpy(),strcat()函数)
- 用户登录界面
- perlchina2016 大会
- VB .NET周期实现
- 【ESXI6.0】 ESXI6.0安装时无法安装网卡驱动的解决方法及将网卡驱动加载进ISO
- Linux系统安装gcc/g++详细过程
- leetcode.93. Restore IP Addresses
- C++中范围for语句
- C语言字符串函数和C++string类中的部分函数的使用
- c++实验6-数组合并
- c语言小项目----注释转换
- 工厂方法与抽象工厂模式
- C++中范围for语句
- Linux系统安装gcc/g++详细过程
- GO 语言圣经 -在线阅读
- html 常用标签补充
- 每日一linux命令(3)-------pwd
- unity多线程
- 第三章 索引
- HDU 5698 (数学 lucas)