此文章是收集和整理关于嵌入式笔试的题目,便于自己及他人复习用的,取之于网络,用于网络。
1、 写出简单的hello world字符设备驱动?
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/moduleparam.h>
static int __init hello_init(void) 初始化模块时执行
{
printk(KERN_INFO "hello world\n");
return 0;
}
static void __exit hello_exit(void) 卸载模块时执行
{
printk(KERN_INFO "goodbye world\n");
}
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("hello");
MODULE_AUTHOR("hongdy");
module_init(hello_init);
module_exit(hello_exit);
2、构造函数与析构函数可以是虚函数吗?
构造函数不能是虚函数,析构函数常常是虚函数。
3.进程间通信的方式?
- 管道(pipe),流管道(s_pipe)和有名管道(FIFO)
- 信号(signal)
- 消息队列
- 共享内存
- 信号量
- 套接字(socket)
4、写一个高性能的函数把一个int乘以9?
int Multiply_9(int a)
{
return ((a<<3)+a);
}
5、 用一个C语言表达式判断一个数是否位2的N次幂。
答案:x == (((x ^ (~0x0)) + 1) & x)
6、int ( (f)(int, int))(int)这里的f是什么?
答案:f是指针,指向一个参数为(int,int),返回值为一个指针的函数
这个返回的指针指向一个参数为(int),返回值为int的函数。
7、 typedef struct
{
char data[10];
}T1;
typedef struct
{
T1* p;
char data[0];
}T2;
sizeof(T2)==?
答案:4
8、含N个元素的一个数组,数组的值的范围是1~N-1,找出重复的那个值。
int array[N];
int FindRepeat(void)
{
int flag[N]={0};
int i;
for(i=0;i<N;i++)
{
if(flag[array[i]]==1)
return array[i];
else
flag[array[i]]=1;
}
}
9、找错误
(1) void Test(const int v)
{
int* p;
p=v;
}
答案:不能把非const指针指向const变量。应该是:const int* p;
(2) void Test(const int& v)
{
const int& p;
p=v;
}
答案:引用必须在定义的时候初始化。应该是:const int& p=v;
10、编程题,翻转链表。
typedef struct node
{
int value;
struct node* next;
}SLink;
SLink* ReverseLink(SLink* h)
{
SLink* pre,*cur,*next;
pre=NULL;
cur=h;
next=cur->next;
while(next)
{
cur->next=pre;
pre=cur;
cur=next;
next=next->next;
}
return cur;
}
11、请用C语言写出能将一个字符串逆序函数。
参考此blog
12、请编写一个C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
int search(char *str,int n,char ch)
{
int i;
for(i=0;i<n && *(str+i)!=ch;i++);
if(i==n)
return -1;
else
return i;
}