恒玄科技嵌入式软件开发笔试 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;
}

 

1init_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.hprintf函数需要#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++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。

全部评论

相关推荐

11-12 17:29
门头沟学院 C++
中兴 嵌入式开发岗 n*12
点赞 评论 收藏
分享
8 20 评论
分享
牛客网
牛客企业服务