嵌入式软件面试题一

1、请写出你所知道的C语言关键字。

auto :声明自动变量

switch :用于开关语句

case:开关语句分支

break:跳出当前循环

default:开关语句中的“其它”分支

continue:结束当前循环,开始下一轮循环

goto:无条件跳转语句

do :循环语句的循环体

while :循环语句的循环条件

if:条件语句

else :条件语句否定分支(与 if 连用)

enum :声明枚举类型

union:声明共用数据类型

extern:声明变量是在其它文件中声明

for:一种循环语句

register:声明寄存器变量

return :子程序返回语句(可以带参数,也可不带参数)循环条件

sizeof:计算数据类型长度

static :声明静态变量

struct:声明结构体变量或函数

typedef:用以给数据类型取别名

unsigned:声明无符号类型变量或函数

void :声明函数无返回值或无参数,声明无类型指针

volatile:说明变量在程序执行中可被隐含地改变

short :声明短整型变量或函数

signed:声明有符号类型变量或函数

char :声明字符型变量或函数

float:声明浮点型变量或函数

int: 声明整型变量或函数

long :声明长整型变量或函数

const :声明只读变量

double :声明双精度变量或函数

2、IPv4把所有的IP地址分为ABCDE五类。请写出B类地址和C类地址的范围和掩码,D类地址的用途是什么?

分类 前缀码 开始地址 结束地址 对应CIDR修饰 默认子网掩码

A类地址 0 0.0.0.0 127.255.255.255 /8 255.0.0.0

B类地址 10 128.0.0.0 191.255.255.255 /16 255.255.0.0

C类地址 110 192.0.0.0 223.255.255.255 /24 255.255.255.0

D类地址 (群播) 1110 224.0.0.0 239.255.255.255 /4 未定义

E类地址 (保留) 1111 240.0.0.0 255.255.255.255 /4 未定义

3、请简述在linux中多进程程序和多线程程序的区别。

4、列出目前linux系统能支持的文件系统,列举常用的四个以上。

Ext3 ext4 jffs2 yffs2 ubifs  cramfs

5、写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个?

#define  MIN(a, b)  (  (a)  <=  (b)  :  (a)  ?  (b)  )

6、什么是MMUMMU的作用?

MMUMemory Management Unit的缩写,负责虚拟地址到物理地址的转换,提供硬件机制的内存访问授权


7、关键字volatile有什么含义,并给出几个应用场合。

1. 定义的变量应该是异变的,防止编译器优化,使得程序直接存取原始内存地址。

2. 中断服务程序中修改的供其它程序检测的变量需要加volatile

3. 多任务环境下各任务间共享的标志应该加volatile

4. 存储器映射的硬件寄存器通常也要加voliate,因为每次对它的读写都可能有不同意义

5. 频繁地使用volatile很可能会增加代码尺寸和降低性能

8、双向链表操作题:

/*节点定义*/

typedef srruct node

{

struct node *next;

struct node *previous;

}NODE;

/*链表定义*/

typedef struct

{

NODE node;

int count;

} LIST;

#define HEAD node.next

#define TALL  node.previous

/*初始化一个链表*/

void lstInit (LIST *pList)

{

pPlist->HEAD=NULL;

pPlist->TALL=NULL;

pPlist->count=0;

}

请编写函数把一个节点(pNode)插入链表pList中某个节点(pPrev)之后。

9、请写出strcpy 和 memcpy 的区别
1strcpymemcpy都是标准C库函数。
2strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。
3strcpy函数的原型是:char* strcpy(char* dest, const char* src);
4memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
5memcpy函数的原型是:void *memcpy( void *dest, const void *src, size_t count );
strcpymemcpy主要有以下3方面的区别。
5.1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
5.2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
5.3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

6、实现原型:

char   *strcpy(char* strDest, const char* strSrc)
{

if((strDest == NULL) || (strSrc == NULL)) 
  return  NULL;
  char* strDestCopy  =  strDest;

while(  ( *strDest++  =  *strSrc++ )  !=  '/0'  );

return  strDestCopy;
}

void *memcpy(void *dest, const void *src, size_t count)
{
char  *tmp = dest;
  const  char  *s  = src;

while (count--)
   *tmp++ = *s++;
  return dest;
}

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值