C语言笔试题-C笔试题大全14-附答案(共20页).doc
《C语言笔试题-C笔试题大全14-附答案(共20页).doc》由会员分享,可在线阅读,更多相关《C语言笔试题-C笔试题大全14-附答案(共20页).doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上c语言常见笔试题总结【1 使用宏】 1.1 #error的作用? #error用于向编译器报错,并输出它后面带的错误信息。例如: #ifndef SOMETHING #error SOMETHING not defined! #endif 如果在这段代码之前未定义过SOMETHING,则在编译时出错,并给出SOMETHING not defined!的错误信息。 1.2 定义一个宏,求出给定数组中的元素的个数 #define NELEMENTS(array) (sizeof(array) / sizeof(array)0) 【2 数据声明和定义】 给定以下类型的变量a
2、的定义式: a) An integer int a;b) A pointer to an integer int *a;c) A pointer to a pointer to an integer int *a;d) An array of 10 integers int a10;e) An array of 10 pointers to integers int *a10;f) A pointer to an array of 10 integers int (*a)10;g) A pointer to a function that takes an integer as an argu
3、ment and returns an integer int (*a)(int );h) An array of ten pointers to functions that take an integer argument and return an integer int (*a10 ) (int );【3 复杂类型(1)】 有如下表达式: char (*(*x()(); 请用文字描述x是什么。 首先,确定标识符:x x是一个函数,没有参数:x() 返回值是一个指针:*x() 这个指针指向一个数组:(*x() 数组中的每个元素是指针:*(*x() 指向一个不带参数的函数:(*(*x()(
4、) 函数的返回值是char:char (*(*x()() 这里,要知道*、()和的优先级【5 头文件】 问:为什么标准头文件都有类似以下的结构? #ifndef _INCvxWorksh #define _INCvxWorksh #ifdef _cplusplus extern C #endif /*.*/ #ifdef _cplusplus #endif #endif 在编译源文件时,C编译器和C+编译器都会对符号(函数或变量)名作某些修正,但两者采用的修正方法不同,所以两者生成的目标文件不能互相链接。在C+ +中使用extern C可以让C+符号获得C链接特性。由于C+编译器会自动定义_c
5、plusplus宏,所以在C语言头文件中采用这种结构可以保证无论使用何种编译器,生成的目标文件都具有C链接特性,能够与标准C编译器所生成的目标文件相链接【6 static关键字】 请说出static关键字的3种用处:(1)用于全局变量;外部静态变量,只能在本源文件中被引用,不能被其它源文件所引用。(2)用于局部变量;局部静态变量,在函数返回后存储单元不释放;下一次调用该函数时,该变量为上次函数返回时的值。(3)用于函数。内部函数,只能被本源文件中的函数所调用,不能被其它源文件调用。/* file.c */static int a;int b; static int fn()static int
6、 x;int y; 【7 const关键字】 7.1 const关键字的意义是什么?7.2 解释以下的变量定义: const int a1; a1是整型常量。int const a2; a2是整型常量。等同于const int a2。const int *a3; a3是指针(a3是可变的),指向一个整型常量。等同于int const *a3。int * const a4; a4是常量指针(a4不可变),指向一个整型变量。int const * const a5; a5是常量指针(a5不可变),指向一个整型常量。等同于const int * const a5。【8 volatile关键字】 8.
7、1 volatile意义?volatile int *p; 8.2 volatile能和const一起使用吗?const关键字的意思是限制编程者自己不能修改变量的值;两者并不矛盾。 例如一个内存映射的、只读的硬件寄存器,假设它的地址是p,则可以这样声明:volatile const UINT32 *p;【9 sizeof()】 有以下定义: char *pmsg = A; char msg = A; char ch = A; 问:sizeof(pmsg) = ?4sizeof(msg) = ?2sizeof(“A”) = ?2sizeof(ch) = ?1sizeof(A) = ?(在C+中等
8、于多少?)(在C语言中,字符常量的数据类型实际上是int;在C+中,它的数据类型是char,从而原式等于1) void f(char param100)/ sizeof(param) = ?4 【10 字符串】 有以下代码 char *pmsg = hello, world!; strcpy(pmsg, hi, there.); 试评论该代码。 【11 混合运算】 有以下代码: void foo()unsigned int a = 6;int b = -20;(a+b 6) ? puts( 6) : puts( = 6); 请问调用foo()的输出? c语言笔试题(九)1struct sign
9、ed int bit0:1; signed int bit1:1; signed int bit2:1; signed int bit3:1; signed int bit4:1; signed int bit5:1; signed int bit6:1; signed int bit7:1;bits;请问sizeof(bits)是否是正确的表达式?请问语句bits mybits; 的定义是否正确?如果不正确,要如何修改上述的结构定义才能使该语句正确?修改后的结构定义是否会影响sizeof(bits)的正确性?如果正确则该表达式的值为多少?如果将上述的结构中int类型改为char类型,此时si
10、zeof(bits)的大小为多少?答案:1)是正确的表达式,因为sizeof后面的内容可以是类型,也可以是变量。2)该语句的定义不正确,因为此时的bits为一个变量;应该这样修改结构的定义typedef struct signed int bit0:1; signed int bit1:1; signed int bit2:1; signed int bit3:1; signed int bit4:1; signed int bit5:1; signed int bit6:1; signed int bit7:1;bits;修改后sizeof(bits)表达式依然正确,其值为4;类型改为cha
11、r后其值为1,注意该值是在VC环境中的32位程序中得到的值,在不同的编译器其值有可能不同,因此在编程时不能自己假定类似结构的大小。3 struct bit unsigned int a0:1,a1:1,a2:1.a7:1; 请问这种写法是否正确?为什么?答案:不正确,位域中的变量不能是数组。4struct a int x; char y; struct a z; struct a *p; 请问这种定义结构正确否? 如果有问题,问题在哪里?答案:结构中不能对定义结构本身的非指针变量,如果编译器支持则会导致无限嵌套,因此一般编译器都会认为struct a是未定义的类型,即使提前声明也不会有任何用处
12、。5 什么是可重入函数?C语言中写可重入函数,应注意的事项?答案:可重入函数是指能够被多个线程“同时”调用的函数,并且能保证函数结果的正确性的函数。在编写可重入函数时通常要注意如下的一些问题:尽量不要使用全局变量,静态变量,如果使用了应该注意对变量访问的互斥。通常可以根据具体的情况采用:信号量机制,关调度机制,关中断机制等方式来保证函数的可重入性。不要调用不可重入的函数,调用了不可重入的函数会使该函数也变为不可重入的函数。注意对系统中的临界资源,互斥资源的访问方式,防止使函数成为不可重入的函数。一般驱动程序都是不可重入的函数,因此在编写驱动程序时一定要注意重入的问题。6 简述stack fra
13、me 的含义。答案:stack frame的中文译名为:栈框架,表示函数在栈空间的调用层次, 7 printf (“%d%dn”,+n, power(2,n); 其中power(2,n)为实现一定功能的函数 如 2n 。 请问这种表示方法有什么潜在的问题? 答案:编译器的不同,对+n 和power(2,n)处理的先后顺序不一样,形成二义性,造成程序的移植性差,因此最好把+n 写在printf函数外面,以消除二义性。8. printf (s); 请问这样的语句有没有问题?(s为一指向有效字符串的指针) 答案:没有%的话,可以这样表达,如果有%在s中的话,有意想不到的输出结果。9 两段代码共存于一
14、个文件,编译时有选择的编译其中的一部分,请问如何实现?答案:有两种简单的办法可以实现:在源码中使用条件编译语句,然后在程序文件中定义宏的形式来选择需要的编译代码。在源码中使用条件编译语句,然后在编译命令中加入宏定义命令来实现选择编译。10数据结构指针传给函数,函数能访问数据单元,但不能修改实际的内容,如何实现?答案:定义为指向常量的指针,这样指针所指的数据结构中的内容就不会被改变。如: const 类型 *p 或 类型 const *p 11 在头文件中定义静态变量,可能产生什么问题? 答案:在使用了该头文件的每个c程序文件中都单独存在一个该静态变量,这样造成空间的浪费并且很容易引起错误。因此
15、建议不要在头文件中定义任何变量。12malloc()与 calloc()的区别?答案: 1)参数上的区别malloc (size_t size);calloc (size_t n , size_t size);malloc分配一块size大小的内存块,而calloc分配一个n*size大小的内存块 2)返回内存块的状态不同malloc分配的内存块没有被清零,而calloc分配的内存块是清了零的。但是建议在使用内存时,如果需要初始化,则最好自己按照需要来进行初试化,不要依赖函数的实现说明。13寄存器变量可不可以访问其地址?可否是全局变量?在什么场合使用寄存器变量? 答案:这些问题都与编译器的实现
16、有关,建议不要声明全局变量为寄存器变量,即使是局部变量都最好不要声明其为寄存器变量,现在的编译器在优化时都会较为合理的安排寄存器变量的使用,而人为的安排有时会造成优化的低效。14n n 的区别?答案:前者是一个字符串并且以/0结束,而后者只是一个简单的字符。15包含预定义头文件 和 的区别?答案:只在指定的目录里寻找被包含文件; 先在当前目录下查找 ,再在指定目录下查找;通常方式用于系统的头文件,而一般用户的头文件用 的方式。16strunt S_A int a10; ; void f() int i; struct S_A *s_ptr; for (i=0,i ai = i; 请问这段代码正
17、确否?答案:这段代码不正确,没有对s_ptr指针进行初始化,在编程中要注意此类低级错误的发生。c语言笔试题(八)1. #pragma pack(8)struct s1short a;long b;struct s2char c;s1 d;long long e;#pragma pack()问: 1.sizeof(s2) = ? 242.s2的s1中的a后面空了几个字节接着是b? 2答:sizeof(S2)结果为24.成员对齐有一个重要的条件,即每个成员分别对齐.即每个成员按自己的方式对齐.也就是说上面虽然指定了按8字节对齐,但并不是所有的成员都是以8字节对齐.其对齐的规则是,每个成员按其类型的
18、对齐参数(通常是这个类型的大小)和指定对齐参数(这里是8字节)中较小的一个对齐.并且结构的长度必须为所用过的所有对齐参数的整数倍,不够就补空字节.S1中,成员a是2字节默认按2字节对齐,指定对齐参数为8,这两个值中取2,a按2字节对齐;成员b是4个字节,默认是按4字节对齐,这时就按4字节对齐,所以sizeof(S1)应该为8;S2中,c和S1中的a一样,按1字节对齐,而d 是个结构,它是8个字节,它按什么对齐呢?对于结构来说,它的默认对齐方式就是它的所有成员使用的对齐参数中最大的一个,S1的就是4.所以,成员d就是按4字节对齐.成员e是8个字节,它是默认按8字节对齐,和指定的一样,所以它对到8
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 笔试 大全 14 答案 20
限制150内