当前位置: 首页 > news >正文

【08】华汉伟业——华汉伟业 嵌入式 C笔试,校招,题目记录及解析

华汉伟业——华汉伟业 嵌入式 C笔试,校招,题目记录及解析

  • 3 请写出以下代码在小端CPU的运行结果:
  • 4.下列转义字将中错误的是
  • 6 表达式"100"+88" =
  • 8.以下关于 static关键字描述正确的是?
  • 9.设float a = 2, b = 4, c =3;,以下C语言表达式与代数式(a+b)+c计算结果不一致的是
  • 10 在Linux中也提供了一组函数接口用于使用共享内存,它们声明在头文件sys/shm.h中,关于以下函数描述正确的是?
  • 11.已知二叉树后序遍历序列为showmebug,中序遍历序列为sohwgemub,它的前序遍历序列为
  • 12 请写出以下代码的运行结果:
  • 14 则表达式2*(N + Y(5+1) )的值是
  • 15 请指出以下代码的问题,并选择描述正确的选项
  • 16.若变量已正确定义,表达式(j=3,j++)的值是
  • 17 C语言中,下列运算符优先级最高的是
  • 18 以下关于堆与栈的区别描述正确的是
  • 19 以下关于多态、继承、私有成员如何使用C++语言实现描述正确的是?
  • 21 关于c/c++中 const关键字描述正确的是?
  • 24 表达式 strcmp(" 3.14".”3.278“)的值是一个
  • 25 数组定义为"int a[4];”,表达式()是错误的。
  • 26 执行活句k=7>>1后, k的当前值是
  • 28 执行以下程序输出的结果是?

华汉伟业——华汉伟业 嵌入式 C笔试,校招,题目记录及解析

3 请写出以下代码在小端CPU的运行结果:

C,运行多次都是cccca55a,故xxxx应该是确定的

typedef union {long value;struct{char a;char b;}v;
}Type;void main() {Type t;t.v.a = 0x5A;t.v.b = 0xA5;printf("value=%x\n", t.value);printf("sizeof(t.value)=%d\n", sizeof(t.value));//测试,自己加的
}
A输出结果:value=xxxxa55a,其中xxxx为不确定
B输出结果:value=xxxxA55A
C输出结果:value=xxxxa55a
D.输出结果:value=xxxxA55A,其中xxxx为不确定

前四位,运行多次,都是cccc,换另一台电脑输出还是一样;
在这里插入图片描述
输出8位的原因是,t.value是long型,4个字节,16进制每两位一个字节。
如果,输出是t.v是一个结构体(两个char组成),2个字节,输出4位a55a;

typedef union {long value;struct{char a;char b;}v;
}Type;struct {char c;char d;
}v2;void main() {Type t;t.v.a = 0x5A;t.v.b = 0xA5;printf("value=%x\n", t.v);printf("sizeof(t.v)=%d\n", sizeof(t.v));v2.c = 0x5A;v2.d = 0xA5;printf("value=%x\n", v2);printf("sizeof(v2)=%d\n", sizeof(v2));
}

在这里插入图片描述

4.下列转义字将中错误的是

D

A.'\2'
B. '\14'
C.'\1000'
D.'\x111'

不合法,
x代表16进制,一个char长度8位,也就是两位16进制数,你这都三位了。

6 表达式"100"+88" =

C

A.188
B.100+88
C.10088
D. 88100

8.以下关于 static关键字描述正确的是?

ABCE (不确定)

A.C++在类中修饰成员函数。该成员函数限于类实例存在而存在,且只能访问静态成员。
B.c/c++在文件中,使用 static修饰全局变量。该全局变量的作用域改变,只能该文件内访问.
C.c/C++在文件中,使用 static修饰函数。该函数的作用域改变,只能该文件内访问。
D.C++在类中修饰成员变量,该成员变量还需要在类外再声明一次。无论该类的实例有多少个,所有
实例共享一个该成员变量实例。且该成员变量先于类的实例而存在。
E.c/c++在函数内部,使用static修饰同部变量。该变量的生命周期产生变化,并不以复合语句结而结束,其生命与进程相同。

static的用法

9.设float a = 2, b = 4, c =3;,以下C语言表达式与代数式(a+b)+c计算结果不一致的是

D

A.(a+b)/2*c
B.c/2*(a+b)
c.(a+b)*c/2
D.(1/2)*(a+b)*c
	float a = 2, b = 4, c =3;float d = (a + b) + c;float A, B , C , D;A = (a + b) / 2 * c;B = c / 2 * (a + b);C = (a + b)* c / 2;D = (1 / 2)* (a + b)* c;printf("%f\n", d);printf("%f\n", A);printf("%f\n", B);printf("%f\n", C);printf("%f\n", D);

在这里插入图片描述

10 在Linux中也提供了一组函数接口用于使用共享内存,它们声明在头文件sys/shm.h中,关于以下函数描述正确的是?

BD

A.shmdt函数用来控制共享内存
B.shmget函数用来创建共享内存
C.shmctl函数该函数用于将共享内存从当前进程中分离
D.shmat函数的作用就是用来启动对该共享内存的访问,并把共享内存连接到当前进程的地址空间

共享内存API

shmget——创建/打开共享内存
shmat——将共享内存与当前进程相关联
shmdt——将当前进程与共享内存间脱离关联
shmctl——操控共享内存

11.已知二叉树后序遍历序列为showmebug,中序遍历序列为sohwgemub,它的前序遍历序列为

C

A  gwohsuemb
B. gwoshuebm
C. gwoshuemb
D. gwsohuemb

在这里插入图片描述

12 请写出以下代码的运行结果:

B

#pragma pack(push, 1)typedef struct tagNode{short a;short b; long c; long *d;struct tagNode* next;
}TNode;#pragma pack(pop)int main(int argc, char* argv[]){TNode *node = (TNode*)0x3000000; printf("%x, %x, %x, %x, %x\n",&node->a, &node->b,&node->c, &node->d, node->next); return(0);
}

在这里插入图片描述

运行出错

printf("%x\n", &node->a);
printf("%x\n", &node->b);
printf("%x\n", &node->c);
printf("%x\n", &node->d);
printf("%x\n", &node->next);//取地址,否则错
printf("%x\n", node);

在这里插入图片描述

#pragma pack (n)            作用:C编译器将按照n个字节对齐。
#pragma pack ()             作用:取消自定义字节对齐方式。#pragma  pack (push,1)     	作用:是指把原来对齐方式设置压栈,并设新的对齐方式设置为一个字节对齐
#pragma pack(pop)          	作用:恢复对齐状态

14 则表达式2*(N + Y(5+1) )的值是

D

#define N 3
#define Y(n) ((N + 1)*n)
A. 54
B.出错
c.42
D.48

15 请指出以下代码的问题,并选择描述正确的选项

ABD

//c
int gFlag=O;//全局变量
//线程1:
void func1()
{//...while(!gFlag);//..
}
线程2:
void func2()
{//...gFlag = 1;//...
}
//c
A.volatile 关键字告诉编译器,不要使用寄存器中的备份变量用于计算。
B.这段代码有时候能正确运行,有时候不能正确的运行。
C.int gFlag = 0 应该修改:volatile int gFlag = 1;
D.int gFlag = 0 应该修改:volatile int gFlag= 0;

16.若变量已正确定义,表达式(j=3,j++)的值是

A

A.3
B.4
c. 5
D.0
	int j;int c = (j = 3, j++);printf("%d\n",c);

在这里插入图片描述
逗号表达式,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。

3+5,6+8)的值是14;
a=(a=35,a4)的值是60,其中(a=35,a4)的值是60, a的值在逗号表达式里一直是15,最后被逗号表达式赋值为60,a的值最终为60。

上述是有括号,整个表达式的值,逗号表达式本身不难,常常与赋值运算符一起考,易错

main()
{
int x,y,z;
x=1;
y=1;
z=x++,y++,++y;
printf("%d,%d,%d\n",x,y,z);
}

2,3,1,
z = 1 ? 因为 "=“优先级比”,"运算符级别高,
故 z=x++,y++,++y; 等价于 (z=x++),y++,++y;
在这里插入图片描述
如果,逗号表达式整体括号,那么 z = 3

z = (x++, y++, ++y);

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

17 C语言中,下列运算符优先级最高的是

D

A.==
B.>>
c.%
D.!

18 以下关于堆与栈的区别描述正确的是

ABCD

A堆的空间使用malloc/new 和 free/delete申请释放,程序员手动管理;
B堆是向高地址扩展的数据结构,是不连续的内存区域
C.栈是向低地址扩展的数据结构,是一块连续的内存区域
D栈是在函数调用过程中用于存储局部变量等的存储空间,由编译器自动生成代码管理。

在这里插入图片描述

堆区:动态申请内存用。从低向高 地址扩展的数据结构,是不连续的内存区域。
栈区:存储局部变量、函数参数值。栈从高地址向低地址增长。是一块连续的空间。

怎么判断数据分配在栈上还是堆上: 首先局部变量分配在栈上;而通过malloc和new申请的空间是在堆上。

对堆栈中分析的比较好的文章进行的总结

申请响应

  • :只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示 栈溢出。
  • :首先应该知道操作系统有一个记录空闲 内存地址的 链表,当系统收到程序的申请时,会遍历该链表,寻 找第一个空间大于所申请空间的堆结点,然后将 该 结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于 大多数系统,会在这块内存空间中的 首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲 链表中。

申请限制

  • :在Windows下, 栈是 从高向低 地址扩展的数据结构,是一块连续的内存的区域。 这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。

  • :堆是 从低向高 地址扩展的数据结构,是不连续的内存区域。这是由于系统是用 链表来存储的空闲 内存地址的,自然是不连续的,而 链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的 虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

效率比较

  • 由系统自动分配,速度较快。但程序员是无法控制的。
  • 是由new分配的内存,一般速度比较慢,而且容易产生 内存碎片,不过用起来最方便.

19 以下关于多态、继承、私有成员如何使用C++语言实现描述正确的是?

BC (A不确定)

A继承采用结构体强制类型转换的办法。基类(结构体)作为派生类(结构体)的第一个成
员变量。
B.多态分为三种,一是模板类和模板函数;二是函数重载;三是虚函数。
C.一个类占用一个文件,私有函数和私有变量采用static关键字修饰,即限制了变量和
函数的访问范围。
D模板类和函数重载可以通过函数指针进行强制转换实现。

一个全局变量被关键字static修饰,改变了变量可见性,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。

一个函数被关键字static修饰,改变了函数可见性,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

21 关于c/c++中 const关键字描述正确的是?

ABCD

A const int*ptr;修饰指针指向的内容是常量,不能被改变;
B. const int value:值不能被改变。
c.const int *function();修饰函数返回指针的内容不能被改变
D.int *const ptr;修饰指针指向的地址是常量,不能被改变;

24 表达式 strcmp(" 3.14".”3.278“)的值是一个

D

A浮点数
BO
c字符
D非零整数

strcmp()

当s1<s2时,回到为负数;当s1=s2时,传参= 0;当s1>s2时,回到正数。

25 数组定义为"int a[4];”,表达式()是错误的。

B

a是const int *不能自加

A.*a
B. a++
C.a[0]

26 执行活句k=7>>1后, k的当前值是

表示将整数7按位右移一位:0111变成0011所以变成3。
也可以理解为将7整除于2,得到3。
在这里插入图片描述

28 执行以下程序输出的结果是?

A

char b[] = "ABCDEF"; 
void main() {char* bp;for (bp = b; *bp; bp += 2)printf("%s",bp);printf("\n");
}
A.ABCDEFCDEFEF
B. ABCDEFABCDEF
c ABCDEFCDEFCD
DABCDEF
http://www.dtcms.com/a/325496.html

相关文章:

  • 聊天室全栈开发-保姆级教程(Node.js+Websocket+Redis+HTML+CSS)
  • Nginx负载均衡教程:应对网站流量暴增的实战指南 (2025)
  • C#项目上传git常见的忽略项目和推荐配置
  • MySQL,Redis重点面试题
  • SharePlay确保最佳游戏体验
  • [Shell编程] Shell 编程之免交互
  • 【CV 目标检测】①——目标检测概述
  • 每日五个pyecharts可视化图表-line:从入门到精通 (3)
  • 如何网络“钓鱼”,钓鱼鱼饵生成工具CobaltStrike使用
  • LangVM —— 一站式多语言版本管理工具,让 Java、Python、Go、Node.js 切换更丝滑
  • 运维学习Day21——LAMP/LNMP 最佳实践
  • Django Request 与 DRF Request 的区别
  • 从 GPT-2 到 gpt-oss:架构进步分析
  • 企业级 IT 运维服务平台数据备份方案:基于 rsync 的自动化实现
  • 时钟频率与带宽
  • 低延迟RTSP|RTMP视频链路在AI驱动无人机与机器人操控中的架构实践与性能优化
  • FlinkSql(详细讲解二)
  • 深入解析游戏引擎(OGRE引擎)通用属性系统:基于Any类的类型安全动态属性设计
  • 服务器配置实战:从 “密码锁” 到 “分工协作” 的知识点详解
  • 【linux】企业级WEB应用服务器tomcat
  • Uipath Studio中的文件管理
  • 基于Springboot+UniApp+Ai实现模拟面试小工具九:移动端框架搭建
  • 4种无需WiFi将数据从iPhone传输到iPhone的方法
  • GraphRAG:用知识图谱赋能检索增强生成,攻克复杂推理难题
  • 【MySQL基础篇】:MySQL索引——提升数据库查询性能的关键
  • 力扣109:有序链表转换二叉搜索树
  • 深入浅出设计模式——行为型模式之观察者模式 Observer
  • vlan (hybird) 实验
  • Python bisect 库详细介绍
  • 【Java基础】你认为Java的优势是什么