2013腾讯实习生笔试题...求解

pp25210 2013-04-14 11:49:05
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
...全文
3872 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
靠靠的博客 2013-05-28
  • 打赏
  • 举报
回复
嗯。。长姿势了。。
DaiwjDev 2013-04-24
  • 打赏
  • 举报
回复
引用 1 楼 pengjialaosan 的回复:
我用下面的代码测了一下: C/C++ code?12345long long a=1, b=2, c=3;printf("%d %d %d\n", a, b, c);printf("%d ", a);printf("%d ", b);printf("%d\n", c); 得到的显示是: 1 0 2 1 2 3 这是什么情况? ……
说实话,printf中 %d 可以正常输出?
王正经~ 2013-04-21
  • 打赏
  • 举报
回复
引用 10 楼 pengjialaosan 的回复:
引用 6 楼 ccc43542876 的回复:引用 1 楼 pengjialaosan 的回复:我用下面的代码测了一下: C/C++ code?12345long long a=1, b=2, c=3;printf("%d %d %d\n", a, b, c);printf("%d ", a);printf("%d ", b);printf("%d\n", c)……
这个是不是涉及到对齐的问题?
袁保康 2013-04-21
  • 打赏
  • 举报
回复
引用 2 楼 turingo 的回复:
1、格式与类型不匹配,无法预料结果;
2、exit。

这个说法有点勉强了吧?“1、格式与类型不匹配,无法预料结果;”。
这个应该是考内存中变量的分部吧。
q598162221 2013-04-18
  • 打赏
  • 举报
回复
话说这两题好简单.....
zhouxf_cn 2013-04-18
  • 打赏
  • 举报
回复
第二题的话exit,实际上是_exit和fllash(函数名不清楚了)的结合 open反正驱动里面有.open,这个不是很清楚 反正read和write是有copy_to_usr和copy_from_usr完成的
Imagpc2hs 2013-04-18
  • 打赏
  • 举报
回复
第一题 printf的参数压栈之后在内存中是这样的 0100 0000 0000 0000 0200 0000 0000 0000 0300 0000 0000 0000 但是按照%d的格式输出,每次只能取4个字节,也就是 0100 0000,0000 0000,0200 0000,所以答案是1 0 2
bljswpu 2013-04-18
  • 打赏
  • 举报
回复
1 0 2 exit
hello_world_ww 2013-04-18
  • 打赏
  • 举报
回复
引用 20 楼 turingo 的回复:
fopen构建在非缓冲的文件系统API(例如open/close/read/write)之上而已。 引用 18 楼 yueyuewang2011 的回复:引用 2 楼 turingo 的回复:1、格式与类型不匹配,无法预料结果; 2、exit。fopen没有调用内核吗
如果是宏内核的OS,fopen的调用也不会陷入内核态吗?
常如意 2013-04-18
  • 打赏
  • 举报
回复
完全没概念啊
王正经~ 2013-04-18
  • 打赏
  • 举报
回复
引用 20 楼 turingo 的回复:
fopen构建在非缓冲的文件系统API(例如open/close/read/write)之上而已。 引用 18 楼 yueyuewang2011 的回复:引用 2 楼 turingo 的回复:1、格式与类型不匹配,无法预料结果; 2、exit。fopen没有调用内核吗
明白了,感谢
图灵狗 2013-04-18
  • 打赏
  • 举报
回复
fopen构建在非缓冲的文件系统API(例如open/close/read/write)之上而已。
引用 18 楼 yueyuewang2011 的回复:
引用 2 楼 turingo 的回复:1、格式与类型不匹配,无法预料结果; 2、exit。fopen没有调用内核吗
王正经~ 2013-04-18
  • 打赏
  • 举报
回复
printf对参数有压栈的过程,完成之后读取时按照转换格式读取,格式不匹配,abc为八个字节,读四个字节,所以是102
王正经~ 2013-04-18
  • 打赏
  • 举报
回复
引用 2 楼 turingo 的回复:
1、格式与类型不匹配,无法预料结果; 2、exit。
fopen没有调用内核吗
yangwenjun2016 2013-04-16
  • 打赏
  • 举报
回复
但我不明白的是 把a,b,c都定义为char型,其他不变,居然输出的是1,2,3,理论上应该是0x00000123,0xcccccccc,,0xcccccccc
yangwenjun2016 2013-04-16
  • 打赏
  • 举报
回复
我在VC下用_int64代替long long,输出结果1,0,2 #include <stdio.h> int main() { _int64 a =1; _int64 b = 2; _int64 c = 3; printf("%d,%d,%d", a, b, c); return 0; }
彭家老三 2013-04-16
  • 打赏
  • 举报
回复
引用 6 楼 ccc43542876 的回复:
引用 1 楼 pengjialaosan 的回复:我用下面的代码测了一下: C/C++ code?12345long long a=1, b=2, c=3;printf("%d %d %d\n", a, b, c);printf("%d ", a);printf("%d ", b);printf("%d\n", c); 得到的显示是: 1 0 2 1 ……
那为什么定义int型,输出short型却可以正确输出呢? 我当时我试了下面的代码,您看这样是输出short型吗? int a=1,b=2,c=3; printf("%hd %hd %hd\n", a, b, c); 这个显示出 1 2 3来。
不学無术_ct 2013-04-16
  • 打赏
  • 举报
回复
函数参数压栈,从右到左 恩恩。。。。
pp25210 2013-04-15
  • 打赏
  • 举报
回复
关于选择题5的分析 【分析】: 传入参数,由右往左,栈空间内存从高往低,little endian, 栈空间如下: 内存高位-> 00000000 00000011 00000000 [00000010](c) [00000000](b) [00000001](a) <-内存低位 因此printf会按照4bytes取参数. 【答案】 输出: 1, 0, 2 来自http://bbs.csdn.net/topics/390424969?page=1#post-394210570第33楼的回复
walker沃克 2013-04-15
  • 打赏
  • 举报
回复
在32和64上面, long long都是8字节,printf("%d %d %d\n", a, b, c);会依次从a的地址开始输出3个整型数据(4B)一共是12B,调用printf时,函数参数的压栈顺序是c,b,a且地址是连续存放的,小端情况下从a开始的栈去内存内容如下: 0x 01 00 00 00 00 00 00 00 0x 02 00 00 00 00 00 00 00 0x 03 00 00 00 00 00 00 00 所以连续输出12个字节的结果就是:1 0 2 这在C++中哪有这个毛事。。。蛋疼。。。
加载更多回复(7)

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧