2013腾讯实习生笔试题...求解
5.假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?
#include <stdio.h>
int main()
{
long long a = 1, b = 2, c = 3;
printf("%d %d %d\n", a, b, c);
return 0;
}
6.下面哪些函数调用必须进入内核才能完成?
腾讯
A. fopen B. exit C. memcpy D. strlen
[解决办法]
参数是右向左压栈的。。。所以分开和写在一起不一样
[解决办法]
第一题考的是printf函数的原型,printf(const char*,...);
第二个参数是任意个数目的参数,所以printf函数不可能分个把参数入栈,而是一股脑全部压入堆栈,而接下来就是根据字符串的格式取数据的过程,参考4,5楼。
[解决办法]
第一题
printf的参数压栈之后在内存中是这样的 0100 0000 0000 0000 0200 0000 0000 0000 0300 0000 0000 0000
但是按照%d的格式输出,每次只能取4个字节,也就是 0100 0000,0000 0000,0200 0000,所以答案是1 0 2
[解决办法]
fopen构建在非缓冲的文件系统API(例如open/close/read/write)之上而已。