C++程序员面试指南第7章

面试题1:编码实现某一变量某位清0或置1
给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清a的bit 3,在以上两个操作中,
要保持其他位不变。
答案:
# define BIT3 (0x1<<3)
static int a;
//设置a的bit 3
void set_bit3(void)
{
a |= BIT3; //将a第3位置1
}
//清a的bit 3
void set_bit3()
{
a &= ~BIT3;  //将a第3位清0
}


面试题2:用C编写一个死循环程序 嵌入式系统中经常要用到无限循环,怎样用C编写死循环呢?
答案:
while(1)
{ }
面试题3:用变量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;
B: int *a;
C: int **a;
D: int a[10];
E: int *a[10];
F: int(*a)[10];
G: int(*a)(int);
H: int(*a[10])(int);


面试题4:设置地址为0x67a9的整型变量的值为0xaa66
在某些工程中,要求设置某一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。
写代码完成这一任务。
答案:
int *ptr;
ptr (int *)0x67a9;
*ptr = 0xaa66;


面试题5:评论下面这个中断函数
中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展——让标准C支持中断。具体代表
事实是,产生了一个新的的关键字_interrupt. 下面的代码就使用了_interrupt关键字去定义一个中断服务子
程序(ISR),请评论以下这段代码。
_interrupt double compute_area(double radius)
{
double area = PI * radius * radius;
printf(" Area = %f",area);
return area;
}
答案: 这段中断服务主要有以下四个问题:
(1)ISR不能返回一个值。
(2)ISR不能传递参数。
(3)在ISR中做浮点运算是不明智的。
(4)printf()经常有重入和性能上的问题。


面试题6:评价一个代码段  评价下面的代码段:
unsigned int zero = 0;
unsigned int compzero = 0xFFFF;


答案:应该将源代码改为:
unsigned int zero = 0;
unsigned int compzero =~0;

猜你喜欢

转载自blog.csdn.net/juluwangriyue/article/details/53862724