您的位置:首页 > 编程语言 > C语言/C++

C语言语法基础考试

2009-06-04 12:36 357 查看
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 AT91SAM9263、Freescale i.MX31均为ARMv5以上架构,我们日常教学及实践以ARMv5+平台为主。现有一网友向我们report一个bug:开源项目g-bios中的一段代码在他的S3C2440上运行失败,而同样的代码在我们的AT91SAM9263上却能正常运行。经初步分析,怀疑是函数指针惹的祸J
请结合ARM体系结构及C语言编译器回答:S3C2440与AT91SAM9263上C语言函数指针的实现有何不同?为何会导致上面的问题?

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

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

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

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

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

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

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

(十一) 如下定义数组是否合法?并说明理由。
int n = 1024;
int a
;

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

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

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

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

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

(十七) 有一个32位变量a,将a的bit3~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,请分别使用#define和typedef语句把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,写一表达式求count在SS中的偏移。

(二十五) 谈谈你的收获及不满。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: