传音 - 软件工程师 - 笔试
❗❗如果本文对您有帮助,请不要吝啬您的评论、点赞、收藏与小花,这对我非常重要!谢谢!❗❗
本文所涉及的题目均为基于个人学习和理解重新表述的内容,仅供学习交流之用,不代表任何实际考试题目。如有雷同,纯属巧合。
岗位:影像部 软件工程师(C/C++方向)(上海)(J16576)
题型:10 道选择题/简答题,1 道改错题,3 道算法/推理题
1、选择题/简答题
1.1
以下为 Linux 下的 64 位 C 程序,请计算 sizeof 的值。
char str[] = "Hello";
char *p = str;
int n = 10;
请计算
sizeof(str)
= (1)sizeof(p)
= (2)sizeof(n)
= (3)
解答:
- 6
- 8
- 4
1.2
64 位 C 程序:
unsigned char *p1;
unsigned long *p2;
p1 = (unsigned char *)0x801000;
p2 = (unsigned long *)0x810000;
请问
p1+5
= (1)p2+5
= (2)
解答:
- 0x801005
- 0x810028
1.3
以下程序运行后的输出结果 ==(A)==
#include <stdio.h>
#define F(X, Y) ((X) + (Y))
int main() {
int a = 3, b = 4;
printf("%d\n", F(a++, b++));
return 0;
}
- 7
- 8
- 9
- 10
解答:
宏定义是预处理阶段的简单字符串替换
F(a++, b++) = ((a++) + (b++)) = 3 + 4 = 7
,因此输出 7
1.4
C/C++ 语言中,关于类的静态成员的不正确描述是 ==(D)==
- 静态成员不属于对象,是类的共享成员
- C++11 之前,非 const 的静态成员要在类外定义和初始化
- 静态成员函数不拥有this指针,需要通过类参数访问对象成员
- 只有静态成员函数可以操作静态数据成员
解答:
静态成员函数只能访问静态成员变量和其他静态成员函数,不拥有 this 指针,但静态成员变量在所有对象间共享,不仅可以被静态成员函数访问,也可以被其他非静态成员函数访问,选项 D 错误
1.5
32 位 C 程序,请问这个结构体所占的空间大小是 ==(C)== 字节
typedef struct {
int a;
char b;
short c;
short d;
} AA_t;
- 16
- 9
- 12
- 8
解答:
在 32 位系统上
int
占用 4 字节,char
占用 1 字节,short
占用 2 字节,默认 4 字节对齐,所以该结构体所占空间如下所示:
4(int
) + 1(char
) + 3(填充) + 4(两个short
) = 12 字节,选项 C 正确
1.6
对于 int *pa[5];
的描述,正确的是?==(A)==
pa
是一个具有 5 个元素的指针数组,每个元素是一个 int 类型的指针pa[5]
表示某个数组的第 5 个元素的值pa
是一个指向数组的指针,所指向的数组是 5 个 int 类型的元素pa
是一个指向某个数组中第 5 个元素的指针,该元素是 int 类型的变量
解答:
int *pa[5];
定义了一个指针数组,所有元素都是int*
类型指针
int (*pa)[5];
定义了一个数组指针,指向有 5 个元素并且类型为int
的数组
1.7
下面哪一个表达式不能访问二维数组 b 的第 i 行第 j 列元素 ==(C)==
b[i][j]
*(b[i]+j)
*(*b+i)+j
(*(b+i))[j]
解答:
选项 C 错误,应修改为
*(*(b+i)+j)
1.8
下面关于 C++ 中 const
和 define
的说法错误的是 ==(B)==
define
宏在预处理阶段展开,const
变量是编译运行阶段使用- 在编译阶段会对
define
宏和const
常量做类型安全检查 const
可以节省空间,避免不必要的内存分配define
宏在定义的时候不会分配内存
解答:
define
宏定义仅在预处理阶段做简单字符串替换,不会对类型进行安全检查,选项 B 错误
1.9
下面程序段输出结果是 ==(B)==
int i = 5, k;
k = (++i) + (++i) + (i++);
printf("%d, %d\n", k, i);
- 24,8
- 21,8
- 20,7
- 24,7
解答:
++i
返回i
的引用,等表达式中所有的++i
计算完毕才会返回值
k = (++i) + (++i) + (i++) = 7 + 7 + 7 = 21
,执行完毕后i
也由 7 后加到 8
因此选项 B 正确
1.10
32 位系统下,下面程序的输出结果为多少?==(B)==
#include <stdio.h>
#include <string.h>
void Func(char str_arg[100]) {
printf("%d\n", sizeo
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,同时还整理了嵌入式软件相关的八股知识。专栏内容涵盖C/C++基础、嵌软常见通信协议、ARM、FreeRTOS、Linux OS相关问题汇总,希望能帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。