面试真题 | 兆易创新嵌入式软件工程师笔试题目解析
[TOC]
单选题
1.Linux中使用 mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是()
A -m
B -d
C -f
D -p
D
mkdir [选项] [目录]
-m --mode=模式,建立目录的时候同时设置目录的权限。
-p --parents 若所建立的上层目录目前尚未建立,则会一并建立上层目录。
-v --verbose 每次创建新目录都显示信息。
-h --help 帮助信息。
2.下面代码创建了多少个进程(不包含main进程本身)()
int main(int argc,char* argv[])
{
fork();
fork() && fork() || fork();
fork();
}
A 19
B 30
C 24
D 29
A
这道题主要考了两个知识点,一是逻辑运算符运行的特点;二是对fork的理解。
如果有一个这样的表达式:cond1 && cond2 || cond3 这句代码会怎样执行呢?
1、cond1为假,那就不判断cond2了,接着判断cond3。
2、cond1为真,这又要分为两种情况:
2.1 cond2为真,这就不需要判断cond3了。
2.2 cond2为假,那还得判断cond3。
fork调用的一个奇妙之处在于它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1、在父进程中,fork返回新创建子进程的进程ID。
2、在子进程中,fork返回0。
3、如果出现错误,fork返回一个负值(题干中说明了不用考虑这种情况)。
在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。
有了上面的知识之后,下面我们来分析fork() && fork() || fork()会创建几个新进程。
很明显fork() && fork() || fork()创建了4个新进程。
总结:
第一行fork生成1个新进程。
第二行的三个fork生成4+4=8个新进程。
第三行的fork会生成10个新进程(这是因为前面总共有10个进程,调用一次fork生成10个新进程。
所以一共会生成1+8+10=19个新进程。
3.如果下列公式成立:3A*124=446C。则采用的是()进制
A 11
B 12
C 14
D 16
C
看个位。最后的结果446C个位为C,因此,A,B可以排除。
假设为14进制,(A * 4 )%14= 12,结果正好为C。因此,答案为14进制。
4.下面关于字符数组的初始化,那个是正确的?()
A char b[2][3] ={"d","e","f"};
B char b[2][3] ={"d","e"};
Cchar b[2][3] ={{"d","e","f"},{"a","b","c"}};
Dchar b[2] ={"d","e"};
B
通常情况下,二维数组的每一行分别使用一个字符串进行初始化。 例如:
char c[3] [8]={{"apple"},{"orange"},{"banana"}};
等价于:
char c[3][8]={"apple","orange","banana"};
A:应改为
char b[3][2] ={"d","e","f"};
C:应改为
char b[2][3][2] ={{"d","e","f"},{"a","b","c"}};
D:应改为
char b[2][2]={"d","e"};
5.在32位系统中,下列类型占用8个字节的为()
A int
B unsigned long long
C char
D short int
B
32位操作系统
int:4字节
unsigned long long:8字节
char :1字节
short int:2字节
注意和64位操作系统的区别:64位系统中,指针变量和long以及unsigned long 都占8个字节,其他的和32位系统一样
简答
1.
int a[6] = {1,2,3,4,5,6};
printf("%d\n",*((int*)(&a+1)-1));
那么打印结果是什么?
6。
将
*((int*)(&a+1)-1))
化简为:*(p-1)
和p=(int*)(&a+1)
&a
是一个指向int(*)[6]
的指针。由于&a
是一个指针,那么在32位机器上,sizeof(&a)=4
,但是**&a+1的值取决于&a指向的类型**,由于&a
指向
int(*)[6]
,所以&a+1 = &a + sizeof(int(*)[6])=&a+24
。&a
是数组的首地址,由此&a+1
表示a向后移动了6个int从而指向a[6](越界),所以p指向的是a[6]。由于p是
int *
类型,那么p-1
就指向a[5],所以*(p-1)=a[5]=6。
2.请写出常量指针和指针常量的代码形式,并简述他们的区别
int const *p1;
const 在前,定义为常量指针
int *const p2;
* 在前,定义为指针常量常量指针p1:指向的地址可以变,但内容不可以重新赋值,内容的改变只能通过修改地址指向后变换。
指针常量p2:指向的地址不可以重新赋值,但内容可以改变,必须初始化,地址跟随一
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
让实战与真题助你offer满天飞!!! 每周更新!!! 励志做最全ARM/Linux嵌入式面试必考必会的题库。 励志讲清每一个知识点,找到每个问题最好的答案。 让你学懂,掌握,融会贯通。 因为技术知识工作中也会用到,所以踏实学习哦!!!