1、 如何在C中初始化一个字符数组。
这个问题看似很简单,但是我们要将最简单的问题用最严谨的态度来对待。关键的地方:初始化、字符型、数组。最简单的方法是char array[];。这个问题看似解决了,但是在初始化上好像还欠缺点什么,个人认为:char array[5]={'1','2','3','4','5'};或者char array[5]={"12345"};或者char array[2][10]={"China","Beijing"};也许更符合“初始化”的意思。

2、 如何在C中为一个数组分配空间。
最简单的方法是:char array[5];意思是分配给数组array一个5个字节的空间。但是我们要知道在C中数组其实就是一个名字,其实质含义就是指针,比如char array[];是到底分配的多少空间?所以我们要将其分成为两种不同的形式给出答案:
一种是栈的形式:char array[5];
一种是堆的形式:char *array; array=(char *)malloc(5);//C++: array=new char[5];
堆和栈的含义其实我也没弄太透彻,改天明白了再发一篇。
我们要明白的是,第一种形式空间分配的大小可能会受操作系统的限制,比如windows会限制在2M;第二种形式成空间分配很灵活,想分配多少分配多少,只要RAM够大。

3、 如何初始化一个指针数组。
首先明确一个概念,就是指向数组的指针,和存放指针的数组。
指向数组的指针:char (*array)[5];含义是一个指向存放5个字符的数组的指针。
存放指针的数组:char *array[5];含义是一个数组中存放了5个指向字符型数据的指针。
按照题意,我理解为初始化一个存放指针的数组,char *array[2]={"China","Beijing"};其含义是初始化了一个有两个指向字符型数据的指针的数组,这两个指针分别指向字符串"China"和"Beijing"。

4、如何定义一个有10个元素的整数型指针数组。
既然只是定义而不是初始化,那就很简单且没有争议了:int *array[10];。

5、 s[10]的另外一种表达方式是什么。
前面说过了,数组和指针其实是数据存在形态的两种表现形式,如果说对于数组s[],我们知道*s=s[0],那么s[10]的另一种表达方式就是:*(s+10)。

6、 GCC3.2.2版本中支持哪几种编程语言。
这个问题实在变态,就像问你#error的作用是什么一样。不可否认,gcc是linux下一个亮点,是一个备受无数程序员推崇的编译器,其优点省略 1000字,有兴趣可以自己查,我翻了翻书,书上曰:支持C,C++,Java,Obj-C,Ada,Fortran,Pascal,Modula-3等语言,这个“等”比较要命,不过我认为已经很全了,如果认为还是不全,干脆把ASM也加上算了,不过那已经不算是编译了。

7、 要使用CHAR_BIT需要包含哪个头文件。
如果结合上面的问题,答题的人估计会认为自己撞鬼了,这个问题实在是……搜索了一下,应该是limits.h。

8、 对(-1.2345)取整是多少?
其实不同的取整函数可能有不同的结果,不过这个数没有太大的争议,答案是-1。

9、 如何让局部变量具有全局生命期。
具体的生命期的概念我觉得我还要好好深入的学习一下,但是这个题目还算比较简单,即用static修饰就可以了,但是只是生命期延长,范围并没有扩大,除非把这个变量定义在函数体外的静态区,不过那样就变成全局变量了,仿佛不符合题目要求。

10、C中的常量字符串应在何时定义?
这个问题说实话不是很理解题干的意思,据我理解,有两种情况,一种是预处理阶段,用#define定义;还有就是使用const修饰词,不过const修饰的是一个变量,其含义是“只读”,称之为常量并不准确,但是确实可以用操作变量的方法当常量用。所以还是第一种比较靠谱。

11、如何在两个.c文件中引用对方的变量。
这个问题也问的挺含糊的,怎么说呢,最简单最直接的方法是为变量添加extern修饰词,当然,这个变量必须是全局变量。还有一种就是利用函数调用来进行变量的间接引用,比如这个C文件中的一个函数引用另外一个C中的函数,将变量通过实参的形式传递过去。不过题目既然说是引用,那么还是用第一个答案好了。

12、使用malloc之前需要做什么准备工作。
其实准备工作很多啊,比如你需要一台计算机之类的。玩笑话,我们首先要知道malloc的用途,简单的说就是动态的分配一段空间,返回这段空间的头指针。实际的准备工作可以这么分:需要这段空间的指针是否存在,若不存在,则定义一个指针用来被赋值,还要清楚要返回一个什么类型的指针,分配的空间是否合理;如果指针已经存在,那么在重新将新的空间头地址赋值给这个指针之前,要先判断指针是否为NULL,如果不是要free一下,否则原来的空间就会被浪费,或者出错,free之后就按照前一种情形考虑就可以了。

13、realloc函数在使用上要注意什么问题。
这个函数我也才知道的,汗一个。据我的初步理解,这个函数的作用是重新分配空间大小,返回的头指针不变,只是改变空间大小。既然是改变,就有变大、变小和为什么改变的问题。变大,要注意不能大到内存溢出;变小,那变小的那部分空间会被征用,原有数据不再存在;为什么改变,如果是想重新挪作他用,还是先 free了吧。

14、strtok函数在使用上要注意什么问题。
这个问题我不知道能不能回答全面,因为实在是用的很少。这个函数的作用是分割字符串,但是要分割的字符串不能是常量,这是要注意的。比如先定义一个字符串:char array[]="part1,part2";,strtok的原形是char *strtok(char *string, char *delim);,我们将","作为分隔符,先用pt=strtok(array,",");,得到的结果print出来就是"part1",那后面的呢,要写成pt=strtok(NULL,",");,注意,要用NULL,如果被分割的字符串会被分成N段,那从第二次开始就一直要用NULL。总结起来,需要注意的是:被分割的字符串和分隔符都要使用变量;除第一次使用指向字符串的指针外,之后的都要使用NULL;注意使用这个函数的时候千万别把指针跟丢了,不然就全乱了。

15、gets函数在使用上要注意什么问题。
这是一个键盘输入函数,将输入字符串的头地址返回。说到要注意的问题,我还是先查了一下网上的一些情况,需要注意的就是gets以输入回车结束,这个地球人都知道,但是很多人不知道的是,当你输入完一个字符串后,这个字符串可能依然存在于这个标准输入流之中,当再次使用gets的时候,也许会把上次输入的东西读出来,所以应该在使用之后用fflush(stdin);处理一下,将输入流清空。最后也还是要注意溢出的问题。关于这个答案我比较含糊,不知道有没有高人高见?

16、C语言的词法分析在长度规则方面采用的是什么策略?
我无语……闻所未闻啊……还是搜索了一下,有一篇文章,地址是:http://202.117.80.9/jp2005/20/kcwz/wlkc/wlkc/03/3_5_2.htm,是关于词法分析器的。其中提到了两点策略: (1) 按最长匹配原则确定被选的词型;(2) 如果一个字符串能为若干个词型匹配,则排列在最前面的词型被选中。不知道是不是题干的要求,还是其他什么。我乃一介草民,望达人指点迷津!

17、a+++++b所表示的是什么意思?有什么问题?
这个东西(称之为东西一点都不过分)其实并没有语法错误,按照C对运算符等级的划分,++的优先级大于+,那么这句话会被编译器看做:(a++)+(++ b),这回明白了吧。有什么问题,语法上没有问题,有的是道德上的问题!作为一个优秀的程序员,我们要力求语句的合法性和可读性,如果写这句的人是在一个 team里,那么他基本会被打的半死……最后讨论一下结果:假设a之前的值是3,b是4,那么运行完这个变态语句后,a的值是4,b是5,语句的结果是 8。

18、如何定义Bool变量的TRUE和FALSE的值。
不知道这个题有什么陷阱,写到现在神经已经大了,一般来说先要把TURE和FALSE给定义了,使用#define就可以:
#define TURE 1
#define FALSE 0
如果有一个变量需要定义成bool型的,举个例子:bool a=TURE;就可以了。

19、C语言的const的含义是什么。在定义常量时,为什么推荐使用const,而不是#define。
首先,这个题干抽了10题回答的一个大嘴巴。关于常量的概念看来我要好好看看书了……我说过了,const修饰词可以将一个变量修饰为“只读”,这个就能称为常量么?姑且认为可以。回到题目中,const是只读的意思,它限定一个变量不允许被改变,谁都不能改!既然是修饰变量,那么变量的类型就可以丰富多彩,int啊,char啊,只要C认识的都可以;但是#define就不可以了,在预处理阶段缺乏类型检测机制,有可能会出错。还有就是变量可以 extern,但是#define就不可以。貌似const还可以节省RAM,这个我倒是没有考证过。至于const的用法和作用,有很多,我会总结后发上来。

20、C语言的volatile的含义是什么。使用时会对编译器有什么暗示。
终于最后一题了,容易么……如果这个测试是一个关于嵌入式的,那么这道题非常重要!!从词面上讲,volatile的意思是易变的,也就是说,在程序运行过程中,有一些变量可能会被莫名其妙的改变,而优化器为了节约时间,有时候不会重读这个变量的真实值,而是去读在寄存器的备份,这样的话,这个变量的真实值反而被优化器给“优化”掉了,用时髦的词说就是被“和谐”了。如果使用了这个修饰词,就是通知编译器别犯懒,老老实实去重新读一遍!可能我说的太“通俗”了,那么我引用一下“大师”的标准解释:
volatile的本意是“易变的” 。
由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化,但有可能会读脏数据。当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。
精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
下面是volatile变量的几个例子:
1). 并行设备的硬件寄存器(如:状态寄存器)
2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3). 多线程应用中被几个任务共享的变量
嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。

嵌入式常见笔试题总结(5)相关推荐

  1. 嵌入式常见笔试题总结(2)

    预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 2 ...

  2. 嵌入式常见笔试题总结

    预处理器(Preprocessor) 1. 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 ...

  3. 嵌入式常见笔试题总结(6)

    一.常识理论题  1. 简述嵌入式操作系统有哪些,你用过哪几种,简述其特点.优势及劣势?(5分)       2. 请描述控制及提高嵌入式软件质量有哪些办法,在开发过程中怎么才能保证嵌入式软件 的可靠 ...

  4. 嵌入式常见笔试题总结(4)

    1:用C语言实现大小端的测试 Int CheckCpu() { union { int a; char b; }c; c.a=1; if(c.b==1) printf("小端"): ...

  5. 嵌入式常见笔试题总结(3)

    1:设float a=2, b=4, c=3:,以下C语言表达式与代数式 (a+b)+c计算结果不一致的是  A.(a+b)*c/2  B.(1/2)*(a+b)*c  C.(a+b)*c*1/2  ...

  6. 嵌入式linux工程师 考试,嵌入式Linux工程师常见笔试题.doc

    嵌入式Linux工程师常见笔试题.doc 这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的. 从 ...

  7. 大厂常见笔试题 滑动窗口内数的和

    大厂常见笔试题,我以为出一个很难的题,结果出了一个基础题, 给你一个大小为n的整型数组和一个大小为k的滑动窗口,将滑动窗口从头移到尾,输出从开始到结束每一个时刻滑动窗口内的数的和. 样例 对于数组 [ ...

  8. java字符串笔试题_五道Java常见笔试题及答案汇总

    1.String和StringBuffer的区别? 答:Java平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了数 ...

  9. mysql @ $_mysql常见笔试题

    一.Mysql常见笔试题 1.Mysql 中有哪几种锁? (1)表级锁:开销小,加锁快.不会出现死锁,锁定粒度大,发生锁冲突的概率高,并发度低. (2)行级锁:开销大,加锁慢.会出现死锁,锁定粒度小, ...

最新文章

  1. 那些在学习iOS开发前就应该知道的事(part 1)
  2. dayjs 源码解析(一)(api)
  3. IntelliJ IDEA 14.0.2破解注册码文件(2015年06月08日)
  4. matlab中 bsxfun函数
  5. python串口通信_python通信串口pyserial安装及常用语句
  6. Asp.Net Mvc - 在OnResultExecut* 拦截Action返回的HTML
  7. Java SpringMvc+hibernate架构中,调用Oracle中的sp,传递数组参数
  8. vue.jsr入门_JSR-308和Checker框架为jOOQ 3.9添加了更多类型安全性
  9. 基础省选+NOI 第5部分 数论进阶
  10. html中点击 checkbox (radio也可以) 隐藏tr 或 展现tr
  11. python--os
  12. 微信小程序事件绑定无效
  13. mt6735通用recovery_mt6735刷机包下载
  14. 大数据智能算法及测评技术
  15. win10 1050ti anaconda搭建tensorflow-gpu
  16. USACO 1.4 Mother's Milk 母亲的牛奶(经典的dfs倒水问题)
  17. HDFS名字空间(NameSpace)
  18. 基于单片机智能窗帘无线遥控控制设计(毕业设计)
  19. html的星星评分效果,利用jQuery实现星星打分评分插件
  20. 儿童python培训班哪家

热门文章

  1. 狗窝里的小日子- 8 ...
  2. 如鹏网 net高级技术 第二章 委托和事件(复习)
  3. 在操作系统重启后恢复应用程序的工作状态
  4. 开源Java反编译工具
  5. Fiddler抓取https证书问题
  6. C++编译报错:重复定义
  7. XML基本概念及增删改查操作
  8. vim学习笔记(4)帮助与配置
  9. JDK1.8使用Dubbo时需注意
  10. 阿里云对象存储OSS与文件存储NAS的区别