联发科 - 嵌入式软件 - 笔试
❗❗如果本文对您有帮助,请不要吝啬您的评论、点赞、收藏与小花,这对我非常重要!谢谢!❗❗
本文所涉及的题目均为基于个人学习和理解重新表述的内容,仅供学习交流之用,不代表任何实际考试题目。如有雷同,纯属巧合。
岗位:软件开发工程师(嵌入式软件方向)
题型:10 道选择题,5 道填空题,2 道简答题,1 道编程题
1、选择题
1.1
【不定项选择题】使用 C 语言编程时,以下对 typedef
和 #define
的使用或理解,正确的有 ==(BD)==
typedef int INTERGER; unsigned INTERGER n;
typedef
在编译阶段生效,有类型检查。#define
在预处理阶段生效,预处理器仅做文本替换,不进行任何检查#define PTR_INT int *
,PTR_INT p1,p2;
#define
没有作用域的限制,在其定义点之后的整个文件中有效,除非它被#undef
指令显式地取消定义,而typedef
有自己的作用域
解答:
typedef
可以用来定义已存在变量类型的别名,但是unsigned
后面应该跟一个完整的类型,选项 A 错误
int* p1,p2;
将定义两个int
类型指针变量P1
和P2
,但是如果#define PTR_INT int *
,然后PTR_INT p1,p2;
将定义一个int*
类型的指针变量P1
和 一个int
类型的普通变量P2
,因此选项 C 可能存在理解上的错误
1.2
【不定项选择题】使用 C 语言编程时,以下叙述错误的 ==(ACD)==
continue
语句的作用是结束整个循环的执行- 只能在循环体内和
switch
语句体内使用break
语句 - 在循环体内使用
break
语句或continue
语句的作用相同 - 从多层循环嵌套中退出时,只能使用
goto
语句
解答:
continue
用于结束当前层循环,break
用于跳出整个循环,选项 A、C 错误
从多层循环嵌套中退出时,可以使用break
、goto
等语句,选项 D 错误
1.3
【不定项选择题】以下对二维数组的定义中正确的是 ==(C)==
int a[4][]={1,2,3,4,5,6};
int a[][3];
int a[][3]={1,2,3,4,5,6};
int a[][]={{1,2,3},{4,5,6}};
解答:
- 缺少第二维大小,无法确定型状,选项 A 错误
- 缺少初始化,选项 B 错误
- 选项 C 正确
- 缺少第一维大小,选项 D 错误
1.4
【不定项选择题】某研究所的员工构成情况是:所有的工程师都是男性,并非所有工程师都是研究生,并非所有研究生都是男性。由此可以推出: ==(ABCD)==
- 有的男性不是工程师
- 有的男研究生是工程师
- 有的研究生是男性
- 有的男性不是研究生
1.5
【不定项选择题】桌上有 20 个硬币,10 个是公面向上,10 个是字面向上。你在桌前被蒙上眼及戴上手套,你无法分辨哪个币是公面向上或字面向上,你只能移动或反转硬币。你的任务是要将 20 个硬币分两组,每组 10 个,而每组硬币里的公面向上的数目要一样。以下哪些可能是正确的答案? ==(AC)==
- 可以完成任务
- 不能完成任务
- 可以,但需要特定的分组方法
- 不行,需要额外感觉硬币的重量
1.6
【不定项选择题】下列程序可以正确执行的是: ==(B)==
- A
#include <stdio.h>
char* returnStr() {
char p[] = "hello world!";
return p;
}
int main() {
char *str = NULL;
str = returnStr();
printf("%s\n", str);
return 0;
}
- B
#include <stdio.h>
char* returnStr() {
char *p = "hello world!";
return p;
}
int main() {
char *str = NULL;
str = returnStr();
printf("%s\n", str);
return 0;
}
- C
#include <stdio.h>
char* returnStr() {
char p[13] = "hello world!";
return p;
}
int main() {
char *str = NULL;
str = returnStr();
printf("%s\n", str);
return 0;
}
- D
#include <stdio.h>
#include <stdlib.h>
char* returnStr() {
char* p = (char*)malloc(13*sizeof(char));
*p = "hello world!";
return p;
}
int main() {
char *str = NULL;
str = returnStr();
printf("%s\n", str);
free(str);
return 0;
}
解答:
选项 A、B、C、D 的区别在于 returnStr 函数内变量 的定义 选项 A 中 是定义在函数栈上的局部数组,在函数返回时,这个数组的内存会被释放,导致返回的指针 指向的内存不再有效,选项 A 错误 选项 B 中 指向的是字符串常量 ,它存储在常量区,这部分内存是全局有效且不可修改的,选项 B 正确 选项 C 中 是局部数组,类似于选项 A,返回局部变量的地址会导致未定义行为,因为该数组在函数返回时会被释放,选项 C
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,同时还整理了嵌入式软件相关的八股知识。专栏内容涵盖C/C++基础、嵌软常见通信协议、ARM、FreeRTOS、Linux OS相关问题汇总,希望能帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。