这些题目来自国嵌嵌入式培训视频《语言的艺术-笔试专题班》,特地整理下以便学习,如有错误欢迎指正
1. 32 位机上根据下面的代码,问哪些说法是正确的? (C )
signed char a = 0xe0;
unsigned int b = a;
unsigned char c = a;
A. a>0 && c>0 为真
B. a == c 为真
C. b 的十六进制表示是:0xffffffe0
D. 上面都不对
解析:
* a=0xe0 二进制为11100000 最高位为符号位 1代表负数,因此a>0为假
* a为负数,c为无符号是正数,那么a==c为假
* 负的高位用1补齐,正的高位用0补齐
2. 下面哪些选项能编译通过? (A )
int i;
char a[10];
string f();
string g(string & str);
A. if(!!i){f();}
B. g(f());
C. a=a+1;
D. g("abc");
解析:
* 答案是A ,但是本人用GCC编译时提示f()只声明未定义的错误
* f()返回的是一个临时变量,只有g()的参数是const引用时才能传入临时变量
* 数组名不能被赋值
* 不能将非const引用初始化为const char*
3. int a[10]; 问下面哪些不可以表示 a[1] 的地址? (A )
A. a+sizeof(int)
B. &a[0]+1
C. (int*)&a+1
D. (int*)((char*)&a+sizeof(int))
解析:
* a+4显然错误
* &a[0]+1即a+1 正确
* 数组地址强制转化为int*,即a[1]地址
* 数组地址被转化为char* 然后加4,向前步进了4*sizeof(char),然后又转化为int*,即a[1]的地址
4. 问下面的数据都存放在哪些存储区? (BC )
int main()
{
char *p = "hello,world";
return 0;
}
A. 代码段
B. 栈
C. 常量区
D. 堆
解析:
* p为一个局部变量,存放在栈,“hello,world”为字符串常量,存放在常量区
*main函数是在代码段,但题目问的是数据
5. 下面哪些函数调用必须进入内核才能完成? (AB )
A. fopen
B. exit
C. memcpy
D. strlen
解析:
* fopen是打开文件函数,文件是可以看成一个设备的,打开一个设备就会给设备所属的驱动程序发送一个IRP,而与真实硬件相关的驱动都运行与内核
* 结束进程需要访问PCB进程控制块)和TCB(线程控制块)等等数据结构,而它们都存在于内核
* memcpy和strlen两函数为普通函数,跟内核无关
6. 死锁发生的必要条件? (ABCD )
A. 互斥条件
B. 请求和保持
C. 不可剥夺
D. 循环等待
不解释
7. 有两个线程,最初 n=0,一个线程执行 n++; n++; 另一个执行 n+=2; 问,最后可能的 n
值? (BCD )
A. 1
B. 2
C. 3
D. 4
解析:
* n++; n++ 2
* n++; n+=2 3
* n++; n++; n+=2; 4
8. 下面哪些说法正确? (B )
A. 数组和链表都可以随机访问
B. 数组的插入和删除可以达到 O(1)
C. 哈希表无法法进行范围检查
D. 二叉树无法进行线性访问
解析:
* 数组可以随机访问,链表是不能随机访问的
* 二叉树可以前序遍历 中序遍历 后序遍历,都是线性访问
9. 基于比较的排序的时间复杂度下限是多少? (C )
A. O(n)
B. O(n^2)
C. O(nlogn)
D. O(logn)
10. 对于下列程序,在一个 big endian 的 32 位的计算机上,b 的结果是? (C )
unsigned int a = 0x1234;
char b = *((char*)&a);
A. 0x12
B. 0x34
C. 0x00
D. 程序崩溃
解析:
* 大端模式节存放在低地址处,a=0x00001234,b为char型占两个字节,即0x00
及任何的比较语句。
/*
* test.c
*
* Created on: 2015年3月29日
* Author: wind
*/
#include <stdio.h>
int min(int a, int b)
{
int c = a - b;
int flag = ((unsigned int)c) >> 31;
int array[] = {b, a};
return array[flag];
}
int main(int argc, char **argv)
{
printf("%d\n", min(1,2));
printf("%d\n", min(10,23));
return 0;
}