恒玄科技嵌入式软件开发笔试 10-13
《嵌入式软件开发笔试与面试手册》:https://blog.nowcoder.net/zhuanlan/jvN8gj
《软件开发笔试汇总》:https://blog.nowcoder.net/zhuanlan/0oDWVm
全是简答题
1.写出下面代码的执行结果
int main() { int a= 2; if(a & 1 ==0) printf("a & 1 == 0"); else printf("a & 1 != 0"); return 0; }
a & 1 != 0
解释:由于运算符的优先级,表达式 1 == 0 首先被计算,其结果是 false 或 0。因此,这个条件实际上变为 if (a & 0),这显然总是为 0(即 false)。
2.在4字节对齐的32位系统中下,有结构体:
struct TEST
{
char c;
int i;
} *t;
如果t = (struct TEST *)0x1000;那么:
sizeof(t)= 4
t +4= 0x1020
解释:
t 是一个指向结构体 TEST 的指针。在32位系统中,所有指针的大小都是4字节,不论它们指向何种数据类型。因此,sizeof(t) 是4字节。
char c; 占用1个字节,但由于后续的 int 类型需要按4字节对齐,因此在 char 和 int 之间会有3个字节的填充。
对于指针 t,t + 1 增加的是一个 struct TEST 的大小,即8字节。因此,t + 1 将是地址 0x1000 + 8 = 0x1008。所以 t + 4 将是 0x1000 + 4 * 8 = 0x1020
3.指出下面代码中的错误
void init_data(char*p, size_t len){ int i; p =(char *)malloc(len); for (i = 0; i <= len; i++){ p[i]= '0' + i%10; } } int main(void) { char *m; init_data(m,100); printf("%s\n", m); return 0; }
1、init_data(m,100);改为init_data(&m,100); p =(char *)malloc(len);改为p =(char *)malloc(len+1);
2、数组越界:for (i = 0; i <= len; i++)中的循环条件使得当i = len时,代码试图访问p[len],这是越界的。应该使用i < len作为循环条件。
3、没有包含必要的头文件:malloc是在stdlib.h,printf函数需要#include <stdio.h>。
4、没有释放内存:代码分配了内存,但在main函数结束时并没有释放它。这会导致内存泄漏。
4、指出下面程序printf结果
unsigned short app_gsound_env_mtu; unsigned char app_gsound_ble_get_mtu(void) { retur
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏主要发布嵌入式软件开发相关岗位2023年(2024届)的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。