欢迎来到天天文库
浏览记录
ID:32280865
大小:34.50 KB
页数:5页
时间:2019-02-02
《c语言语法基础考试》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言语法基础考试(第2轮)学员姓名: 试卷说明:1) 本试卷共25题,部分来自Intel、微软、TI等公司的面试题,其余出自平时基础课程。2) 本试卷主要目的是考查对C语言本身的理解程序,而非算法测试。3) 所有题目均需相关说明,“yes/no”型回答均不得分。4) 从实际项目开发的角度回答问题,切忌使用应试教育中的答题方式。必要时可自由发挥。(一) 下面哪一题题目本身有误? (二) 我们常说C语言中的指针表示内存中的一个地址。那么,就目前的PC机而言,这个内存地址指的就是主板DIMM插槽上DDR3SDRAM内存中的一个地址吗?
2、(三) 函数指针与普通数据类型指针有什么区别? (四) 我们常说main()函数是C程序的入口,所以程序执行时的第一条机器指令位于main地址处,对吗?若不是,请解释main()函数之前还需执行什么? (五) 我们常说C语言是一种基于函数和栈的语言。那么,C语言函数中的栈与普通数据结构上提到的栈有什么区别?(至少回答两点) (六) 32位ARMLinux嵌入式系统,典型Memory空间划分为3G(user)+1G(kernel)。基于这种划分,请画出Linux内核和用户进程的空间布局图,要求至少包括数据段、代码段、栈和堆四个基本段。 (七) 未初始化全局变量是怎样被初始成0
3、的? (八) 你在什么情况下会使用预处理标识#error? (九) 如下定义数组是否合法?并说明理由。intn=1024;chara[n]; (十) 定义Type*a[3][4],当Type为int*或char时数组a占据的内存空间大小分别为多少? (十一) static、const两个常用关键字的作用? (十二) volatile关键字和memorybarrier的作用? (十三) switch语句为什么比if语句效率高? (十四) 写一个if语句判断一个32位整数能否表示为2的某次方(不能用循环)。 (十五)
4、 有一个32位变量a,将a的bit3~bit5置为2(即0b010),其它几位保持不变。 (十六) 用C语言实现将内存地址从0x87654321的开始的4个字节置为0x1234,并说明你的代码有何问题。 (十七) 有如下变量定义,请依次写出后面四条赋值语句的左值:charcx=(char)0xff;unsignedcharbx=(unsignedchar)0xff;intix;unsignedintux; ix=cx;ix=bx;ux=cx;ux=bx; (十八) 指出下面代码的错误之处:typedefstructSS{
5、 intx,y,z;}*p;p=malloc(sizeof(*p));//TODO:addcodeherefree(&p->y); (十九) 已知某一类型Type1,请分别使用#define和typedef语句把Type2定义为Type1,并说明你的代码有什么问题。 (二十) 下面代码有什么问题?char*a=“abc”,b[]=“abc”;intmain(){ char*c=“abc”; chard[]=“123”; strncpy(c,d,10);} (二十一) 下面代码中*p的值是多少?(用16进制表示)
6、chara[]={1,2,3,4,5,6,7,8},*b=a+2;int*p=(int*)a+1;//此时*p=? p=(int*)b;//此时*p=? (二十二) 已知structSS中有一成员count,写一表达式求count在SS中的偏移。 (二十三) 写一段代码,验证栈往低地址方向增长。 (二十四) SamsungS3C2440基于低端的ARMv4架构,虽已淘汰出主流市场,但功能简单、便于入门,为广大无基础的嵌入式爱好者自学时使用;目前业界ARMv5及以上架构是主流,如ATMELAT91SAM9263、SamsungS3C6410、MarvellPXA16
7、8均为ARMv5以上架构,我们日常教学及实践以ARMv5以上平台为主。现有一网友向我们report一个bug:开源项目g-bios中的一段代码在他的S3C2440上运行失败,而同样的代码在我们的AT91SAM9263和S3C6410上却能正常运行。经初步分析,怀疑问题出在函数指针上。请结合ARM体系结构及C语言编译器回答下面问题:1) 函数和函数指针的本质分别是?2) S3C2440与AT91SAM9263上C语言函数指针的实现有何不同?为何会导致上面的问题? (二十五) 谈谈你的收获及不满
此文档下载收益归作者所有