C语言语法基础考试

from:http://www.maxwit.com/msg.php/40.html

C语言语法基础考试(第2轮)

学员姓名:           

试卷说明

1)     本试卷共25题,部分来自Intel、微软、TI等公司的面试题,其余出自平时基础课程。

2)     本试卷主要目的是考查对C语言本身的理解程序,而非算法测试。

3)     所有题目均需相关说明,“yes/no”型回答均不得分。

4)     从实际项目开发的角度回答问题,切忌使用应试教育中的答题方式。必要时可自由发挥。

 

(一) 下面哪一题题目本身有误?请更正。

 

(二) 结合ARM体系结构,分别说明函数和函数指针的本质。

 

(三) Samsung S3C2440基于低端的ARMv4架构,虽已淘汰,但功能简单、开发容易,为广大无基础的嵌入式爱好者自学时使用;目前业界ARMv5 及以上架构是主流,如ATMEL AT91SAM9263Freescale i.MX31均为ARMv5以上架构,我们日常教学及实践以ARMv5+平台为主。现有一网友向我们report一个bug开源项目g-bios中的一段代码在他的S3C2440上运行失败,而同样的代码在我们的AT91SAM9263上却能正常运行。经初步分析,怀疑是函数指针惹的祸J

  请结合ARM体系结构及C语言编译器回答:S3C2440AT91SAM9263C语言函数指针的实现有何不同?为何会导致上面的问题?

 

(四) 我们常说main()函数是C程序的入口,所以程序执行时的第一条机器指令位于main地址处,对吗?若不是,请解释main()函数之前还需执行什么?

 

(五) 我们常说C语言是一种基于函数和栈的语言。那么,C语言函数中的栈与普通数据结构上提到的栈有什么区别?(至少回答两点)

 

(六) 我们常说C语言中的指针表示内存中的一个地址。那么,就目前的PC机而言,这个内存地址指的就是主板DIMM插槽上DDR3 SDRAM内存中的一个地址吗?

 

(七) 程序和进程有何区别?

 

(八) 函数指针与普通数据类型指针有什么区别?

 

(九) 32ARM Linux嵌入式系统,典型Memory空间划分为3G(user) + 1G (kernel)。基于这种划分,请画出Linux内核和用户进程的空间布局图,要求至少包括数据段、代码段、栈和堆四个基本段。

 

(十) 你在什么情况下会使用预处理标识#error

 

(十一)      如下定义数组是否合法?并说明理由。

int n = 1024;

int a[n];

 

(十二)      定义 Type *a[3][4],当Typeintchar *时数组a占据的内存空间大小分别为多少?

 

(十三)      static关键字的作用?

 

(十四)      const关键字的作用?

 

(十五)      switch语句为什么比if语句效率高?

 

(十六)      写一个if语句判断一个32位整数是否为2n次方(不能用循环)。

 

(十七)      有一个32位变量a,将abit3~bit5置为2(即0b010),其它几位保持不变。

 

(十八)      C语言实现将内存地址从0x87654321的开始的4个字节置为0x1234,并说明你的代码有何问题。

 

(十九)      有如下变量定义,请依次写出后面四条赋值语句的左值:

int ix;

unsigned int ux;

char cx = (char)0xff;

unsigned char bx = (unsigned char)0xff;

 

ix = cx;

ix = bx;

ux = cx;

ux = bx;

 

(二十)      指出下面代码的错误之处:

typedef struct SS

{

       int x, y, z;

} *p;

p = malloc(sizeof(*p));

// TODO: add code here

free(&p->y);

 

(二十一) 已知某一类型Type1,请分别使用#definetypedef语句把Type2定义为Type1,并说明你的代码有什么问题。

 

(二十二) 下面代码有什么问题?

char *a = “abc”, b[] = “abc”;

int main()

{

       char *c = “abc”;

       char d[] = “123”;

       strncpy(c, d, 10);

}

 

(二十三) 下面代码中*p的值是多少?(用16进制表示)

char a[] = {1, 2, 3, 4, 5, 6, 7, 8};

int *p = (int *)a + 1;

 

(二十四) 已知struct SS中有一成员count,写一表达式求countSS中的偏移。

 

(二十五) 谈谈你的收获及不满。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值