面试模拟题1(C语言)

面试模拟题1(C语言)
面试模拟题1(C语言)

面试模拟题1 (C)

面试题1:用find 写出查找/opt/kernel目录下(包括子目录)文件名为Kconfig的命令。

cd /opt/kernel; find –name Kconfig 或find /opt/kernel –name Kconfig

面试题2:用 Vi 编译器底行命令模式实现字符串替换,把当前文件中的“xiaodai”全部替换成“banzhang”。

%s/xiaodai/banzhang/g

面试题3:变量的声明和定义有什么区别?

答:变量的定义:为变量分配地址和存储空间,只在一个地方定义

变量的声明:不为变量分配地址,可以在多个地方声明,加入extern 修饰的变量的声明,说明此变量将在文件以外被定义。

很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。

面试题4:sizeof是库函数吗?sizeof 和 strlen 的区别?

sizeof 不是库函数,sizeof 是计算变量类型的大小,即占存储区多少个字节;

而 strlen 是计算字符串字面值的实际长度,如字符串“hello”,它的长度是5,则strlen(“hello”) = 5;

sizeof 是一个操作符,strlen 是库函数

sizeof 的参数可以是数据的类型,也可以是变量,而strlen 只能以结尾为‘\0’的字符作为参数。

编译器在编译时就计算出了sizeof 的结果,而 strlen 函数必须在运行时才能计算出

来,并且sizeof 计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际

的长度。

数组做 sizeof 的参数不退化,而传递给 strlen 做参数就退化指针了,计算出的是数组中字符串中的实际长度。

如: char num[10] = “hello”

sizeof(num) = 10, 而 strlen(num) = 5;

又如:char num[] = “helloworld”

sizeof(num) = 11, strlen(sum) = 10

注意:sizeof 是最容易混淆为函数名的操作符。

面试题5:链表和数组有什么区别

面试题6:简述队列和栈的异同

面试题7:有以下语句: char a=3, b=6, c; c = a^b<<2; 则c的二进制值是_____。

面试题8:如何打印出当前源文件的文件名以及源文件的当前行号?

面试题9:假设某个函数的原型为:void foo( int x, int y ); 该函数分别被C编译器和C++编译器编译后在符号库中的名字是什么?

面试题10:在QT程序中可以调用被C 编译器编译后的函数吗?如果可以怎么实现?

面试题11:.h头文件中的ifndef/define/endif 的作用?#i nclude 与#i nclude "file.h"的区别?

面试题12:结构与联合有和区别?

面试题13:全局变量和局部变量可否同名,他们是否有区别?如果有,是什么区别?

面试题14:static有什么用途?static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?

面试题15:什么是预编译,何时需要预编译?

面试题16:有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的值为多少?。

面试题17:请计算sizeof的值

char str[] = “Hello” ;

char *p = str ;

int n = 10;

请计算

sizeof (str ) =_____

sizeof ( p ) =_____

sizeof ( n ) =_____

void Func ( char str[100])

{

请计算sizeof( str ) =

}

void *p = malloc( 100 ); 请计算sizeof ( p ) =

char *str[]={“Hello”,”HI”,“\x0”};

请计算:

sizeof(str) =

sizeof(str[0]) =

面试题18:头文件中有如下宏定义,

#define DECLARE_TASKLET(name, func, data) \

struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(0), func, data }

.c源文件中有如下语句,static DECLARE_TASKLET(btn_tasklet,

btn_tasklet_func,

(unsigned long)&mydata);

请写出预编译后,该语句展开的结果.

面试题19:写一个程序,以递归方式反序输出一个字符串。如给定字符串“abc”输出“cba ”。

面试题20:对于一个字节(8bit)的无符号整形变量,求二进制表示中“1”的个数,要求算法执行效率尽可能地高。

面试题21:参数传递有哪些形式?寄存器和堆栈传递各有什么优缺点? 面试题22:Define宏语句和inline函数有什么区别?

面试题23:char a[5][4],a的地址为0,问printf(“%d”,a[4]+3)值

面试题24:编写一个宏,实现判断数组a元素的个数。

面试题25:.#define DOUBLE(x) x+x ,i = 5*DOUBLE(5); i 是多少?

面试题26:i++一下代码的输出结果是?

int i = 1;

int j = 2;

int k = i+++j;

cout << k << endl;

面试题27:下面代码输出是什么?为什么

void foo(void)

{

unsigned int a = 6;

int b = -20;

(a+b > 6) puts("> 6") : puts("<= 6");

}

面试题28:关于动态申请内存的问题

void GetMemory(char *p)

{

p = (char *)malloc(100);

}

void Test(void)

{

char *str = NULL;

GetMemory(str);

strcpy(str, "hello world");

printf(str);

}

请问运行Test 函数会有什么样的结果?

面试题29:请问运行 Test 函数会有什么样的结果?

char *GetMemory(void)

{

char p[] = "hello world";

return p;

}

void Test(void)

{

char *str = NULL;

str = GetMemory();

printf(str);

}

面试题30:请问运行 Test 函数会有什么样的结果?

void GetMemory2(char **p, int num)

{

*p = (char *)malloc(num);

}

void Test(void)

{

char *str = NULL;

GetMemory(&str, 100);

strcpy(str, "hello");

printf(str);

}

面试题31:请问运行 Test 函数会有什么样的结果?

void Test(void)

{

char *str = (char *) malloc(100);

strcpy(str, “hello”);

free(str);

if(str != NULL)

{

strcpy(str, “world”);

printf(str);

}

}

面试题32:用预处理指令#define 声明一个常数,用以表明 1 年中有多少秒(忽略闰年问题)

面试题33:C 语言中结构化程序设计的三种基本控制结构

面试题34:请说出 const 与#define相比,有何优点?

面试题35:简述数组与指针的区别?

面试题36:main 函数执行完毕后,是否可能会再执行一段代码,给出说明?

面试题37:如果编写一个标准 strlen 函数

面试题38:如何引用一个已经定义过的全局变量?

面试题39:do……while 和 while……do 有什么区别?

面试题40:写一个“标准”宏 MIN

面试题41:typedef 和 define 有什么区别

面试题42:Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。

例如,思考一下下面的例子:

#define dPS struct s *

typedef struct s * tPS;

以上两种情况的意图都是要定义dPS 和tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么?

面试题43:int (*s[10])(int) 表示的是什么

面试题44:写出 bool 、int、 float、指针变量与“零值”比较的 if 语句bool 型数据:

面试题45:请写出以下代码的打印结果

#include

void main( void )

{

int a[5]={1,2,3,4,5};

int *ptr=(int *)(&a+1);

printf("%d,%d",*(a+1),*(ptr-1));

return;

}

面试题46:设置地址为 0x67a9 的整型变量的值为 0xaa66

嵌入式C语言经典笔试题目

嵌入式c语言经典笔试题目 1 .用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1) #define语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3)意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 4)如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。 2 .写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B)((A)<= (B) ? (A) : (B)) 这个测试是为下面的目的而设的: 1)标识#define在宏中应用的基本知识。这是很重要的。因为在嵌入(inline)操作符变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。 2)三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。 3)懂得在宏中小心地把参数用括号括起来 4)我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事? least = MIN(*p++, b); 3.预处理器标识#error的目的是什么? 如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。 死循环(Infinite loops) 4.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是: while(1) { } 一些程序员更喜欢如下方案: for(;;) { } 这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,

c语言笔试题目及答案

c语言笔试题目及答案 C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。下面是c语言笔试题目及答案,请参考。 c语言笔试题目及答案 一、选择题((1)~(10)每小题2分,(11)~(50)每小题1分,共60分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选 项涂写在答题卡相应位置上,答在试卷上不得分。 (1)数据的存储结构是指________。 A)存储在外存中的数据 B)数据所占的存储空间量 C)数据在计算机中的顺序存储方式 D)数据的逻辑结构在计算机中的表示 答案:D 评析:数据的逻辑结构在计算机存储空间中的存放形式形式称为数据的存储结构(也称数据的物理结构)。 (2)下列关于栈的描述中错误的是________。 A)栈是先进后出的线性表

B)栈只能顺序存储 C)栈具有记忆作用 D)对栈的插入与删除操作中,不需要改变栈底指针 答案:B 评析:栈是一种特殊的线性表,又称先进后出表(FILO—First In Last Out)。 (3)对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是 ________。 A)冒泡排序为n2 B)冒泡排序为n C)快速排序为n D)快速排序为n(n一1)/2 答案:D 评析:假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后扫描和n/2遍的从后往前扫描,需要比较次数为n(n-1)/2。快速排序法的最坏情况比较次数也是n(n-1)/2。 (4)对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为________。 A)log2n B)n/2 C)n D)n+l 答案:C 评析:顺序查找过程中,如果被查找的元素是线性表中的最后一个元素,或者元素不在线性表中,则需要与线性表中所有的元素进行比较。对长度为n的线性表进行顺序查找,在最坏情况下需要比较

嵌入式C语言面试题汇总(超经典)

第一部分:基本概念及其它问答题 1、关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。 2、“引用”与指针的区别是什么? 答、1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 3) 不存在指向空值的引用,但是存在指向空值的指针。 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。 流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。 3、.h头文件中的ifndef/define/endif 的作用? 答:防止该头文件被重复引用。 4、#include 与#include “file.h”的区别? 答:前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。 5、描述实时系统的基本特性 答:在特定时间内完成特定的任务,实时性与可靠性。 6、全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 答:全局变量储存在静态数据区,局部变量在堆栈中。 7、什么是平衡二叉树? 答:左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。 8、堆栈溢出一般是由什么原因导致的? 答:1.没有回收垃圾资源 2.层次太深的递归调用

c语言经典面试题

C语言面试题大汇总之华为面试题 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错. 4、请写出下列代码的输出内容 #include int main(void) { int a,b,c,d; a=10;

c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 答:10,12,120 5、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。 2) 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。3) static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对

C语言经典面试题目集锦

1.前言 2.声明和初始化 2.1我如何决定使用那种整数类型? 2.264位机上的64位类型是什么样的? 2.3怎样定义和声明全局变量和函数最好? 2.4extern在函数声明中是什么意思? 2.5关键字auto到底有什么用途? 2.6我似乎不能成功定义一个链表。我试过typedef struct{char*item;NODEPTR next;}*NODEPTR;但是编译器报了错误信息。难道在C语言中一个结构不能包含指向自己的指针吗? 2.7怎样建立和理解非常复杂的声明?例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组? 2.8函数只定义了一次,调用了一次,但编译器提示非法重定义了。 2.9main()的正确定义是什么?void main()正确吗? 2.10对于没有初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为``零",它可否作为空指针或浮点零? 2.11代码int f(){char a[]="Hello,world!";}不能编译。 2.12这样的初始化有什么问题?char*p=malloc(10);编译器提示``非法初始式"云云。 2.13以下的初始化有什么区别?char a[]="string literal";char*p="string literal";当我向p[i]赋值的时候,我的程序崩溃了。 2.14我总算弄清除函数指针的声明方法了,但怎样才能初始化呢? 3.结构、联合和枚举 3.1声明struct x1{...};和typedef struct{...}x2;有什么不同? 3.2为什么struct x{...};x thestruct;不对? 3.3一个结构可以包含指向自己的指针吗? 3.4在C语言中实现抽象数据类型什么方法最好? 3.5在C中是否有模拟继承等面向对象程序设计特性的好方法? 3.6我遇到这样声明结构的代码:struct name{int namelen;char namestr[1];};然后又使用一些内存分配技巧使namestr数组用起来好像有多个元素。这样合法和可移植吗? 3.7是否有自动比较结构的方法? 3.8如何向接受结构参数的函数传入常数值? 3.9怎样从/向数据文件读/写结构? 3.10我的编译器在结构中留下了空洞,这导致空间浪费而且无法与外部数据文件进行"二进制"读写。能否关掉填充,或者控制结构域的对齐方式? 3.11为什么sizeof返回的值大于结构的期望值,是不是尾部有填充? 3.12如何确定域在结构中的字节偏移? 3.13怎样在运行时用名字访问结构中的域? 3.14程序运行正确,但退出时却``core dump''了,怎么回事? 3.15可以初始化一个联合吗?

C语言笔试题大全

C语言笔试题大全 4. static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7. 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性 在特定时间内完成特定的任务,实时性与可靠性 9. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈 10. 什么是平衡二叉树? 左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1 11. 堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源 12. 什么函数不能声明为虚函数? constructor 13. 冒泡排序算法的时间复杂度是什么? O(n^2) 14. 写出float x 与“零值”比较的if语句。 if(x>0.000001&&x<-0.000001) 16. Internet采用哪种网络协议?该协议的主要层次结构? tcp/ip 应用层/传输层/网络层/数据链路层/物理层 17. Internet物理地址和IP地址转换采用什么协议? ARP (Address Resolution Protocol)(地址解析協議) 18.IP地址的编码分为哪俩部分? IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。 2.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。 循环链表,用取余操作做 3.不能做switch()的参数类型是: switch的参数不能为实型。 華為 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如

C语言面试题(经典全)

1.static有什么用途?(请至少说明两种) 1)限制变量的作用域 2)设置变量的存储域(堆,主动分配内存也是堆) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在栈 6.堆栈溢出一般是由什么原因导致的? 堆栈溢出一般是循环的递归调用导致的,如果使用的大数据结构的局部变量,也可能导致堆栈溢出。没有回收垃圾资源导致的是内存泄露最后内存耗尽。 20.不能做switch()的参数类型是: switch的参数不能为实型。(只能是int char) 9.写出float x 与“零值”比较的if语句。 if(x<0.000001&&x>-0.000001)

3.在c语言库函数中将一个字符转换成整型的函数是atol()吗,这个函数的原型是什么? 函数名: atol 功能: 把字符串转换成长整型数 函数的原型: long atol(const char *nptr); 程序例: #include #include int main(void) { long l; char *str = "98765432"; l = atol(lstr); printf("string = %s integer = %ld\n", str, l); return(0); } 1.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现? c用宏定义,c++用inline

C语言面试题大汇总,个人觉得还是比较全

4. static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7. 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性 在特定时间内完成特定的任务,实时性与可靠性 9. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈 10. 什么是平衡二叉树? 左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1 11. 堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源 12. 什么函数不能声明为虚函数? constructor 13. 冒泡排序算法的时间复杂度是什么? O(n^2) 14. 写出float x 与“零值”比较的if语句。 if(x>0.000001&&x<-0.000001) 16. Internet采用哪种网络协议?该协议的主要层次结构? tcp/ip 应用层/传输层/网络层/数据链路层/物理层 17. Internet物理地址和IP地址转换采用什么协议? ARP (Address Resolution Protocol)(地址解析協議) 18.IP地址的编码分为哪俩部分? IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。 2.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出 C程序。 循环链表,用取余操作做 3.不能做switch()的参数类型是: switch的参数不能为实型。 華為 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

100条经典C语言笔试题目(全)

100条经典C语言笔试题目 1、请填写bool,float,指针变量与“零值”比较的if语句。 提示:这里“零值”可以是0,0.0,FALSE 或者“空指针”。例如int变量n与“零值” 比较的if语句为: if ( n == 0 ) if ( n != 0 ) 以此类推。 (1)请写出 bool flag 与“零值”比较的 if 语句: 【标准答案】if ( flag ) if ( !flag ) (2)请写出 float x 与“零值”比较的 if 语句: 【标准答案】 const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON) 不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成 “>=”或“<=”此类形式。 (3)请写出 char *p 与“零值”比较的 if 语句 【标准答案】 if (p == NULL) if (p != NULL) 2、以下为 Linux下的 32 位 C程序,请计算 sizeof 的值。 char str[] = “Hello” ; char *p = str ; int n = 10; 请计算(1)sizeof (str ) = (2)sizeof ( p ) = (3)sizeof ( n ) = 【标准答案】(1)6、(2)4、(3)4 (4)void Func ( char str[100]) { ……; } 请计算 sizeof( str ) = (5)void *p = malloc( 100 ); 请计算sizeof ( p ) = 【标准答案】(4)4、(5)4 3、 long a=0x801010; a+5=? 【标准答案】0x801010用二进制表示为:“1000 0000 0001 0000 0001 0000”,十 进制的值为8392720,再加上5就是8392725。 4、用变量a给出下面的定义

试题题库-—嵌入式开发c语言面试题全套

嵌入式开发.C语言面试题 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多 少 秒而不是计算出实际的值,是更清晰而没有代价的。 3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器 这个常数是的长整型数。 4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记 住 ,第一印象很重要。 2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) <= (B) (A) : )) C\C++试题集C\C++ Development这个测试是为下面的目的而设的: 1). 标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变 为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到 要求的性能,嵌入代码经常是必须的方法。 2). 三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比 if-then-else更优化的代码,了解这个用法是很重要的。 3). 懂得在宏中小心地把参数用括号括起来 4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?Least = MIN(*p++, b); 3. 预处理器标识#error的目的是什么? 如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用 的。只有书呆子才会读C语言课本的附录去找出象这种 问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。 死循环(Infinite loops) 4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是:

c语言笔试题(答案)

笔试题 一、填空题(每个空4分,共28分) 1)struct tagABC { char name[10]; char sex; long sno; float score[4]; }*pAbc;(四字节对齐) pAbc=NULL; 那么,执行pAbc+=2;之后pAbc的值为(64 ) 2)如下代码,最终value的值是(8) int *p1,*p2; int value; p1=(int*)0×400; p2=(int*)0×408; value = p2-p1; 3)如下代码,printf的结果为(2) #include〈stdio.h〉 #include〈string.h〉 void main(void) { char acNew[20]= “\\0\0”; printf(“%d\n”,strlen(acNew)); } 4) 有如下程序段,运行该程序的输出结果是(33) main () { int y=3,x=3,z=1; printf(“%d%d\n”,(++x,y++),z+2); } 5)设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后,n的值为(2)6)struct tagAAA { Unsigned char ucId:1; Unsigned char ucPara0:2; Unsigned char ucState:6; Unsigned char ucTail:4; Unsigned char ucAvail; Unsigned char unTail2:4;

Unsigned long ulData; }AAA_S 问:AAA_S在字节对齐分别为1,4情况下,占用的空间大小分别是多少?( 9)(12 ) 二、选择题(每题2分,共34分) 1)若有说明int(*p)[3];以下叙述正确的是( D ) A:p是指针数组 B:(*p)[3]和*p[3]等价 C:p是指向一维数组中任何一个元素的指针 D:p是指向含有3个整型元素的一维数组的指针 2)以下关于单元测试的描述,哪些是对的?(D) A:黑盒测试针对软件的功能,不考虑功能的实现细节; B:白盒测试针对源代码的测试,从程序功能的具体实现上找错; C:路径覆盖是黑盒测试的一种方法,编写测试用例使程序的每条语句都能走到; D:条件覆盖是百盒测试的一种方法, 编写测试用例使程序的每个判断的各种情况都能到3)以下可以用于任务间通信的有(ABCD) A:共享存 B:信号量 C:消息队列和管道 D:socket调用 4)有关结构,以下哪些描述是对的?(BC) A:为了测试方便,尽量把一个结构的功能设计得多一些 B:不同结构间的关系不要过于复杂 C:结构中的各元素应代表同一事务的不同侧面,而不应把描述没有关系或关系很弱的不同事务的元素放到同一结构中 D:结构中元素的布局与排列顺序可以随意设计 5)关于强制类型转化,下面说确的是(ABCD) A:当目的结构的空间大于源结构的空间时,要重点关注存访问超过源结构围的情形,可能越界; B:当目的结构的空间小于源结构的空间时,要重点关注对目的结构赋值不能完全覆盖源结构围的情形,可能遗漏; C:结构体之间的强制类型转换时,其成员字段的数据类型的差异也是要格外小心的; D:与结构体之间的强制类型转换相比,基本数据结构的强制类型转换更容易出现上面描述的情况,使用的时候,一定要慎之又慎; 6)正确的使用assert,软件系统不会对人为原因造成的错误进行处理。它有利于(A BCD) A:缺陷及早暴露,加快定位进程; B:明确表示函数接口或算法逻辑的校验关系,增强软件代码的可读性; C:去除不必要的容错处理,简化代码处理流程,降低软件处理复杂度; D:强化编程接口之间的契约,增强软件的可维护性; 7)对于循环体的执行效率,下述说确的是(ABCD ) A:循环体工作量最小化 B:在多重循环中,应将最忙的循环放在最层 C:尽量减少循环的嵌套层次 D:避免在循环体做无谓的判断语句,将循环语句置于判读语句的代码块之中 8)设数组a[5]={10,20,30,40,50};已知指针p指向a[1];则表达式*++p的值是(A)

嵌入式Linux C语言面试试题

基础试题(C语言) 一、ANSI C/C++方面的知识 一.1、简答题。下面的题目必须全部答对才给分(20分): 1、如何在C中初始化一个字符数组。 2、如何在C中为一个数组分配空间。 3、如何初始化一个指针数组。 4、如何定义一个有10个元素的整数型指针数组。 5、s[10]的另外一种表达方式是什么。 6、GCC3.2.2版本中支持哪几种编程语言。 7、要使用CHAR_BIT需要包含哪个头文件。 8、对(-1.2345)取整是多少? 9、如何让局部变量具有全局生命期。 10、C中的常量字符串应在何时定义? 11、如何在两个.c文件中引用对方的变量。 12、使用malloc之前需要做什么准备工作。 13、realloc函数在使用上要注意什么问题。 14、strtok函数在使用上要注意什么问题。 15、gets函数在使用上要注意什么问题。 16、C语言的词法分析在长度规则方面采用的是什么策略? 17、a+++++b所表示的是什么意思?有什么问题? 18、如何定义Bool变量的TRUE和FALSE的值。 19、C语言的const的含义是什么。在定义常量时,为什么推荐使用const,而不是#defin e。 20、C语言的volatile的含义是什么。使用时会对编译器有什么暗示。 一.2、问答题。 1、----------------------------------------------------------- "匈牙利命名法"有什么优缺点?(2分) 2、----------------------------------------------------------- 下面x, y, *p的值是多少,有什么问题?(2分) int x, y, z = 2; int *p=&z; x=sizeof*p; y=x/*p; /* x=?, *p=?, y=?, 有什么问题?*/ 3、----------------------------------------------------------- 下面的语句是什么意思?如何声明或定义才使它们更易懂?(10分)

C语言面试题和答案

1.什么是编辑器,编译器,源代码,目标代码? 略 2.编写一个最简单的程序。 答案:void main(void) {} 或 void main(void) { } 3.C语言有哪两种存储数值的方式? 答案:变量和常量 4.请写出下列代码的输出内容 #include int main(void) { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 答:10,12,120 5. 请写出下列代码的输出内容 #include int a,b; int main(void) { a = b = 5;

/* Print them, decrementing each time. */ /* Use prefix mode for b, postfix mode for a */ printf("\nPost Pre"); printf("\n%d %d",a--,--b); printf("\n%d %d",a--,--b); printf("\n%d %d",a--,--b); printf("\n%d %d",a--,--b); printf("\n%d %d\n",a--,--b); system("PAUSE"); return 0; } 答案:5 4 4 3 3 2 2 1 1 0 6.请写出下列代码的输出内容 #include /* Initialize variables. Note that c is not less than d, */ /* which is one of the conditions to test for. */ /* Therefore, the entire expression should evaluate as false.*/ int a = 5, b = 6, c = 5, d = 1; int x; int main( void ) { /* Evaluate the expression without parentheses */ x = a < b || a < c && c < d; printf("\nWithout parentheses the expression evaluates as %d", x); /* Evaluate the expression with parentheses */ x = (a < b || a < c) && c < d; printf("\nWith parentheses the expression evaluates as %d\n", x); return 0; } 答案:Without parentheses the expression evaluates as 1 With parentheses the expression evaluates as 0 7.下面表达式的值是多少?

C语言面试题.pdf

一、 C语言面试题: 1、问:在嵌入式开发中,为什么能通过C语言直接操作硬件? 答:因为C有指针,它是C语言的灵魂,它可以直接访问内存。 2、问:链表的作用?(这是上一个问题的延申,学员一般会举一堆例子来说 明它的作用,但这都不是重点,没有抓住主要矛盾) 答:链表用于内存管理,链表节点中的指针域可以将不连续的内存彼此关 联起来,实现内存的动态管理。 3、问:什么变量不能用指针指向? 答:寄存器变量(register 修饰),因为这个变量会优先选择存放到CPU 寄存器中,而指针只能指向内存的任务区域,但不能指向寄存器。 4、问:有符号字符型和无符号字符型变量的最大值和最小值分别是多少(十 六进制多少),为什么? 答:有符号(-128—127,-0X80—0X7F),无符号(0-255,0X00—0XFF)。 5、问:林锐面试题中四个有关内存操作的问题: 第一题、运行会出现段错误(崩溃): 答:因为参数是值传递,所以主调函数中的str指针已然指向空,不能向 里面拷数据,除非加上取地址,采用二维指针接收才能传递动态内存; 第二题:乱码: 答:实际上可能是乱码,也可能显示出一部分内容,显示乱码是因为刚才 那段栈内存空间全部被覆盖,如果未完全覆盖则显示一部分内容; 第三题:能够输出hello 答:但由于没有在同一层释放内存,容易导致内存泄露; 第四题:对已经释放的内存进行操作 答:会破坏其它有用数据,后果难以预料,通常提示出现段错误。 6、问:哪些地方可以用到const?const变量和函数输入参数用const修饰有 哪些作用? 答:1、定义常量 (1)const修饰变量,const TYPE ValueName=value;value是不可变的。 (2)将const 改为外部链接,作用于扩大至全局,编译时分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在在程序其他 地方进行了定义; Extend const int ValueName = value; 2、指针使用CONST (1)指针本身是常量不可变 (char *)const pContent; Const (char*)pContent; (2)指针指向的内容是常量不可变 Const char *pContent; Char const *pContent; (3)两者都不可变 Const char *const pConten 3、函数中使用CONST (1)const修饰函数的参数

c语言面试题目100及最佳答案

c语言面试题目100及最佳答案 作为IT行业人士需要掌握的最基本的计算机语言—c语言,如今的地位只高不低,c语言掌握程度的高低往往在面试的时候可以完全表现出来,而有些问题是大家平时似乎是知道的,但却不能完整准确地回答上来的,今天大家带来精心整理的C语言经典面试题,希望对大家有所帮助。 1、请填写bool , float, 指针变量与“零值”比较的if 语句。 提示:这里“零值”可以是0, 0.0 , FALSE 或者“空指针” 。例如int 变量n 与“零值”比较的if 语句为: if ( n == 0 ) if ( n != 0 ) 以此类推。 (1)请写出bool flag 与“零值”比较的if 语句: 【标准答案】if ( flag ) if ( !flag ) 100 条经典 C语言笔试题目 (2)请写出float x 与“零值”比较的if 语句: 【标准答案】 const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON) 不可将浮点变量用“==”或“!=”与数字比较,应该设法

转化成“>=”或“<=”此类形式。 100 条经典 C语言笔试题目 (3)请写出char *p 与“零值”比较的if 语句 【标准答案】 if (p == NULL) if (p != NULL) 2、以下为Linux下的32 位C 程序,请计算sizeof 的值。 char str[] = “Hello” ; char *p = str ; i nt n = 10; 请计算 (1)sizeof (str ) = (2)s i zeof ( p ) = (3)sizeof ( n ) = 【标准答案】 (1)6、(2)4 、(3 )4 (4)void Func ( char str[100]) { …… ; } 请计算sizeof( str ) = (5)void * p = mall oc( 100 );

c语言经典笔试题(非常全)

1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) <= (B) (A) : (B)) 4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是: while(1) { } 一些程序员更喜欢如下方案: for(;;) { } 第三个方案是用goto Loop: ... goto Loop; 5. 用变量a给出下面的定义 a) 一个整型数(An integer) b) 一个指向整型数的指针(A pointer to an integer) c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer) d) 一个有10个整型数的数组(An array of 10 integers) e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers) f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers) g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer) h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(An array of ten pointers to functions that take an integer argument and return an integer ) 答案是: a) int a; // An integer b) int *a; // A pointer to an integer c) int **a; // A pointer to a pointer to an integer d) int a[10]; // An array of 10 integers e) int *a[10]; // An array of 10 pointers to integers f) int (*a)[10]; // A pointer to an array of 10 integers g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer 6. 关键字static的作用是什么?

C语言面试题大汇总之华为面试题及答案

C语言面试题大汇总之华为面试题及答案 2007-01-24 09:19作者:罗可龙出处:csdn责任编辑:罗可龙 1、局部变量能否和全局变量重名 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 3、全局变量可不可以定义在可被多个.C文件包含的头文件中为什么 答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错 4、语句for( ;1 ;)有什么问题它是什么意思 答:和while(1)相同。 5、do……while和while……do有什么区别 答:前一个循环一遍再判断,后一个判断以后再循环 6、请写出下列代码的输出内容 以下是引用片段: #include main() { int a,b,c,d; a=10; b=a++; c=++a;

d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 答:10,12,120 7、static全局变量与普通的全局变量有什么区别static局部变量和普通局部变量有什么区别static函数与普通函数有什么区别 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。 从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。 static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用; static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值; static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝 8、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在于( 堆)中。 9、设有以下说明和定义: typedef union {long i; int k[5]; char c;} DATE; struct data { int cat; DATE cow; double dog;} too;

相关文档
最新文档