拉勾招聘 > 职场百科 > c语言面试经常问到的问题

c语言面试经常问到的问题

c语言面试经常问到的问题

权威解释

一、列举一个指针跑飞的例子: 1、 意外中断。是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象。 2. 中断变量处理不妥。若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。 3. 地址溢出,常见错误为指针操作错误。我要着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什么头疼的事。 4. 无条件的死循环;比如使用while(x);等待电平变化,正常情况下x都会变成0,就怕万一,因此最好加上时间限制。 5. 看门狗没有关闭。有的单片机即使没使用看门狗开机时也有可能意外自动开启了最小周期的看门狗,导致软件不断复位,造成死机,这个要看芯片手册,最好在程序复位后首先应该显式清除看门狗再关闭看门狗。 6. 栈溢出。最难查找的问题,对于容量小的单片机,尽量减少函数调用层级,减少局部变量,从而减少压栈的时候所需的空间。 用的地方并且把占用RAM大的局部变量改成全局变量。 二、关键字const是什么含意? 只要能说出const意味着“只读”。 三、什么是预编译,何时需要预编译 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。 预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。 四、关键字static的作用是什么? 答案:定义静态变量 五、char * constp char const * p const char *p 上述三个有什么区别? 答案: char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p char * const p是一个char型指针,指针是常量,不允许修改,即类似p=q的语句是错误的; char const * p和const char * p是同一种char型指针,指针指向的字符被看作是常量,不允许修改,即类似*p = q的语句是错误的。 六、一个32位的机器,该机器的指针是多少位答案: 指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。 七、嵌入式系统中经常要用到无限循环,你怎么用C编写死循环。 答案:while(1){}或者for(;;) 八、关键字volatile有什么含意?并给出三个不同的例子 Volatile 关键字告诉编译器不要持有变量的临时性拷贝。一般用在多线程程序中,以避免在其中一个线程操作该变量时,将其拷贝入寄存器。 九、进程之间通信的途径 答案:共享存储系统消息传递系统管道:以文件系统为基础 十、程序的局部变量存在于()中,全局变量存在于()中,动态申请数据存在于()中。 答案:栈;静态区;堆

已有245人喜欢
已有1人不喜欢

其他解释

问题一:什么是预编译?何时需要预编译? 答:预编译又称预处理,是整个编译过程最先做的工作,即程序执行前的一些预处理工作。主要处理#开头的指令。如拷贝#include包含的文件代码、替换#define定义的宏、条件编译#if等。. 何时需要预编译: 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。 问题二:写一个“标准”宏,这个宏输入两个参数并返回较小的一个 答:#define MIN(x, y) ((x)<(y)?(x):(y)) //结尾没有; 问题三:#与##的作用? 答:#是把宏参数转化为字符串的运算符,##是把两个宏参数连接的运算符。 例如: #define STR(arg) #arg 则宏STR(hello)展开时为”hello” #define NAME(y) name_y 则宏NAME(1)展开时仍为name_y #define NAME(y) name_##y 则宏NAME(1)展开为name_1 #define DECLARE(name, type) typename##_##type##_type, 则宏DECLARE(val, int)展开为int val_int_type 问题四:如何避免头文件被重复包含? 答: 例如,为避免头文件my_head.h被重复包含,可在其中使用条件编译: #ifndef _MY_HEAD_H #define _MY_HEAD_H /*空宏*/ /*其他语句*/ #endif

...展开全部