传音 - 软件工程师 - 笔试

❗❗如果本文对您有帮助,请不要吝啬您的评论、点赞、收藏与小花,这对我非常重要!谢谢!❗❗

alt

本文所涉及的题目均为基于个人学习和理解重新表述的内容,仅供学习交流之用,不代表任何实际考试题目。如有雷同,纯属巧合。

岗位:影像部 软件工程师(C/C++方向)(上海)(J16576)

题型:10 道选择题/简答题,1 道改错题,3 道算法/推理题

1、选择题/简答题

1.1

以下为 Linux 下的 64 位 C 程序,请计算 sizeof 的值。

  1. char str[] = "Hello";
  2. char *p = str;
  3. int n = 10;

请计算

  1. sizeof(str) = (1)
  2. sizeof(p) = (2)
  3. sizeof(n) = (3)

解答:

  1. 6
  2. 8
  3. 4

1.2

64 位 C 程序:

  1. unsigned char *p1;
  2. unsigned long *p2;
  3. p1 = (unsigned char *)0x801000;
  4. p2 = (unsigned long *)0x810000;

请问

  1. p1+5 = (1)
  2. p2+5 = (2)

解答:

  1. 0x801005
  2. 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;
}
  1. 7
  2. 8
  3. 9
  4. 10

解答:

宏定义是预处理阶段的简单字符串替换
F(a++, b++) = ((a++) + (b++)) = 3 + 4 = 7,因此输出 7

1.4

C/C++ 语言中,关于类的静态成员的不正确描述是 ==(D)==

  1. 静态成员不属于对象,是类的共享成员
  2. C++11 之前,非 const 的静态成员要在类外定义和初始化
  3. 静态成员函数不拥有this指针,需要通过类参数访问对象成员
  4. 只有静态成员函数可以操作静态数据成员

解答:

静态成员函数只能访问静态成员变量和其他静态成员函数,不拥有 this 指针,但静态成员变量在所有对象间共享,不仅可以被静态成员函数访问,也可以被其他非静态成员函数访问,选项 D 错误

1.5

32 位 C 程序,请问这个结构体所占的空间大小是 ==(C)== 字节

typedef struct {
    int a;
    char b;
    short c;
    short d;
} AA_t;
  1. 16
  2. 9
  3. 12
  4. 8

解答:

在 32 位系统上 int 占用 4 字节,char 占用 1 字节,short 占用 2 字节,默认 4 字节对齐,所以该结构体所占空间如下所示:
4(int) + 1(char) + 3(填充) + 4(两个short) = 12 字节,选项 C 正确

1.6

对于 int *pa[5]; 的描述,正确的是?==(A)==

  1. pa 是一个具有 5 个元素的指针数组,每个元素是一个 int 类型的指针
  2. pa[5] 表示某个数组的第 5 个元素的值
  3. pa 是一个指向数组的指针,所指向的数组是 5 个 int 类型的元素
  4. pa 是一个指向某个数组中第 5 个元素的指针,该元素是 int 类型的变量

解答:

int *pa[5]; 定义了一个指针数组,所有元素都是 int* 类型指针
int (*pa)[5]; 定义了一个数组指针,指向有 5 个元素并且类型为 int 的数组

1.7

下面哪一个表达式不能访问二维数组 b 的第 i 行第 j 列元素 ==(C)==

  1. b[i][j]
  2. *(b[i]+j)
  3. *(*b+i)+j
  4. (*(b+i))[j]

解答:

选项 C 错误,应修改为 *(*(b+i)+j)

1.8

下面关于 C++ 中 constdefine 的说法错误的是 ==(B)==

  1. define 宏在预处理阶段展开,const 变量是编译运行阶段使用
  2. 在编译阶段会对 define 宏和 const 常量做类型安全检查
  3. const 可以节省空间,避免不必要的内存分配
  4. define 宏在定义的时候不会分配内存

解答:

define 宏定义仅在预处理阶段做简单字符串替换,不会对类型进行安全检查,选项 B 错误

1.9

下面程序段输出结果是 ==(B)==

int i = 5, k; 
k = (++i) + (++i) + (i++); 
printf("%d, %d\n", k, i);
  1. 24,8
  2. 21,8
  3. 20,7
  4. 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相关问题汇总,希望能帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。

全部评论

相关推荐

运营3年修炼中接简历辅导:你的科研项目经历里,只写了你的动作,没有写你的思考和成果,不要只写使用什么进行了什么,这等于罗列你的任务,简历是为了突出你的优秀,你在什么样的任务背景下,克服了什么样的困难,针对性地做了哪些事情,最后达成了什么成果(用数据体现你的成果和效率)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务