1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 分享一道面试题(南京中兴通讯)

分享一道面试题(南京中兴通讯)

时间:2019-11-07 23:49:27

相关推荐

分享一道面试题(南京中兴通讯)

面试卷开头有说明,默认32位CPU,小端模式(。。。我就错在这里)。

题目大意是这样的,给你4个文件,问输出。

des.h 文件如下:

#ifndef_DES_H_#define_DES_H_#pragmapack(1)#include"def.h"#endif

des.c文件如下:

#include"def.h"#include"des.h"g_TestgTestSrc={1,2,3};

def.h文件如下:

#ifndef_DEF_H_#define_DEF_H_typedefstruct{intA;charB;shortC;}g_Test;#endif

def.c文件如下:

#include<stdio.h>#include<string.h>#include"des.h"#include"def.h"externg_TestgTestSrc;g_TestgTestDes;intmain(intargc,char**argv){memcpy(&gTestDes,&gTestSrc,sizeof(g_Test));printf("0x%X,0x%X,0x%X\n",gTestDes.A,gTestDes.B,gTestDes.C);return0;}

如果你想自己试试就先不要往下看了,因为下面是我的解题思路,哈哈。

其实看完题目我的第一反应是:哪个傻X写的代码?

细心一点的应该都能看出来两个.c文件对头文件的引用顺序不一样。

des.c 中的 g_Test 应该是按默认的4字节对齐,也就是说 gTestSrc 的大小是 8 bytes。

def.c 中的 g_Test 是按1字节对齐,gTestDes在大小是 7 bytes。

关键是,默认小端模式的话,gTestSrc 在内存中是 01 00 00 00 02 00 03 00 (以上看不懂的自行百度,能上Google更好)

memcpy 把 gTestSrc 前7个字节复制到 gTestDes 中

gTestDes 在内存中是 01 00 00 00 02 00 03

gTestDes.A = 0x 00000001

gTestDes.B = 0x 02

gTestDes.C = 0x 0300

我没考虑大小端,想当然的按 00 00 00 01 00 02 00 03算出 gTestDes.C = 0x0 ......

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。