嵌入式CC++笔试与面试题集(含答案、史上最全)(6)

2019-04-16 16:34

weight *= 10; // 增重 }

return rtn; }

void main() {

char str[32];

printf(\gets(str);

printf(\} #include #include

void reverse(char s[]) { //字符串反转 int c, i=0, j;

for(j=strlen(s)-1;i0); //如果是负数,补上负号 if(sign

第 26 页 共 55 页

试题1:请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1

解答: int checkCPU( ) { {

union w {

int a; char b;

} c; c.a = 1;

return(c.b ==1); } 剖析:

嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址 0x4000 存放内容 0x34 0x4001 0x12 }

而在Big-endian模式CPU内存中的存放方式则为:

内存地址 存放内容 0x4000 0x12 0x4001 0x34 32bit宽的数0x12345678在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址 0x4000 存放内容 0x78 0x4001 0x56 0x4002 0x34 0x4003 0x12 而在Big-endian模式CPU内存中的存放方式则为:

内存地址 存放内容

0x4000 0x12 0x4001 0x34 0x4002 0x56 0x4003 0x78 第 27 页 共 55 页

联合体union的存放顺序是所有成员都从低地址开始存放,面试者的解答利用该特性,轻松地获得了CPU对内存采用Little-endian还是Big-endian模式读写。如果谁能当场给出这个解答,那简直就是一个天才的程序员。

2.

char str[] = “Hello” ; char *p = str ; int n = 10; 请计算 sizeof (str ) = 6 (2分) sizeof ( p ) = 4 (2分) sizeof ( n ) = 4 (2分) void Func ( char str[100]) { 请计算 sizeof( str ) = 4 (2分) } void *p = malloc( 100 ); 请计算 sizeof ( p ) = 4 (2分)

3、在C++程序中调用被 C编译器编译后的函数,为什么要加 extern “C”? (5分)

答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为: void foo(int x, int y);

该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。

C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。 4.有关内存的思考题

void GetMemory(char *p) { char *GetMemory(void) { 第 28 页 共 55 页

p = (char *)malloc(100); } void Test(void) { char *str = NULL; GetMemory(str); strcpy(str, \printf(str); } 请问运行Test函数会有什么样的结果? 答:程序崩溃。 因为GetMemory并不能传递动态内存, Test函数中的 str一直都是 NULL。 strcpy(str, \将使程序崩溃。 char p[] = \return p; } void Test(void) { char *str = NULL; str = GetMemory(); printf(str); } 请问运行Test函数会有什么样的结果? 答:可能是乱码。 因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。 void GetMemory2(char **p, int num) { *p = (char *)malloc(num); } void Test(void) { char *str = (char *) malloc(100); strcpy(str, “hello”); 第 29 页 共 55 页

void Test(void) { char *str = NULL; GetMemory(&str, 100); strcpy(str, \ printf(str); } 请问运行Test函数会有什么样的结果? 答: (1)能够输出hello free(str); if(str != NULL) { strcpy(str, “world”); printf(str); } } 请问运行Test函数会有什么样的结果? 答:篡改动态内存区的内容,后果难以预料,非常危险。 因为free(str);之后,str成为野指针, (2)内存泄漏 if(str != NULL)语句不起作用。

一、你对MVC的理解,MVC有什么优缺点?结合Struts,说明在一个Web应用如何去使用?

答:MVC设计模式(应用观察者模式的框架模式) M: Model(Business process layer),模型,操作数据的业务处理层,并独立于表现层(Independent of presentation)。

V: View(Presentation layer),视图,通过客户端数据类型显示数据,并回显模型层的执行结果。 C: Controller(Control layer),控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图 MVC框架的一种实现模型

模型二(Servlet-centric):JSP+Servlet+JavaBean,以控制为核心,JSP只负责显示和收集数据,Sevlet,连接视图和模型,将视图层数据,发送给模型层,JavaBean,分为业务类和数据实体,业务类处理业务数据,数据实体,承载数据,基本上大多数的项目都是使用这种MVC的实现模式。

StrutsMVC框架(Web application frameworks)

Struts是使用MVC的实现模式二来实现的,也就是以控制器为核心。

Struts提供了一些组件使用MVC开发应用程序:

Model:Struts没有提供model类。这个商业逻辑必须由Web应用程序的开发者以JavaBean

第 30 页 共 55 页


嵌入式CC++笔试与面试题集(含答案、史上最全)(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:隧道工程试题及答案(四套体)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: