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

嵌入式C语言面试题 - 2024/11/18

欢迎找我进行职业规划,超值的自我投资 -> 嵌入式软件工程师一对一指导

转载请注明来源:


  1. 下边代码,x值是?

int x=10;x+ = 3+x%(3);

解析:

  1. 初始值:x = 10

  2. 计算 x % 3

    • 10 % 3 的结果是 1,因为 10 除以 3 的余数是 1。

  3. 计算 3 + x % 3

    • 3 + 1 的结果是 4

  4. 计算 x += 3 + x % 3

    • 相当于 x = x + 4

    • 当前的 x 是 10,所以 x = 10 + 4

  5. 最后,x 的结果是 14

因此,执行完 x+=3+x%(3); 后,x 的值是 14

2.下边代码输出结果是?

int **pp, *p, a=10, b=20;pp = &p;p = &a;p = &b;printf("%d,%d", *p, **pp)

解析:

  1. int **pp, *p, a=10, b=20;

    • pp 是一个指向指针的指针(即二级指针)。

    • p 是一个指向整型的指针(即一级指针)。

    • a 和 b 是整型变量,分别初始化为 10 和 20。

  2. pp = &p;

    • 这行代码将 p 的地址赋值给 pp。现在 pp 指向 p

  3. p = &a;

    • 这行代码将 a 的地址赋值给 p。现在 p 指向 a,因此 *p 的值是 10。

  4. p = &b;

    • 紧接着,这行代码将 b 的地址赋值给 p。现在 p 指向 b,因此 *p 的值变为 20。

    • 注意,此时 pp 仍然指向 p,但 p 的值已经改变,指向了 b 而不是 a

  5. printf("%d,%d", *p, **pp);

    • *p:由于 p 指向 b,所以 *p 的值是 b 的值,即 20。

    • **pppp 指向 p,而 p 指向 b,所以 **pp 相当于 *p,其值也是 b 的值,即 20。

因此,printf("%d,%d", *p, **pp); 的输出结果是 20,20

3.定义语句int *ptr [4];,下面等价的定义语句是?

A int ** ptr;

B int( * ptr) [4];

C int ptr[4];

D int * (ptr [4]);

解析:

在C语言中,int *ptr[4]; 定义了一个包含4个整型指针的数组。每个数组元素都是一个指向整型的指针。

A. int **ptr;

  • 这定义了一个指向指针的指针,而不是一个指针数组。因此,这与原定义不等价。

B. int (*ptr)[4];

  • 这定义了一个指向包含4个整数的数组的指针。虽然这里有括号和[4],但它并不表示一个指针数组,而是表示一个指向数组的指针。因此,这也与原定义不等价。

C. int ptr[4];

  • 这定义了一个包含4个整数的数组,而不是指针数组。因此,这与原定义不等价。

D. int *(ptr[4]);

  • 这实际上与int *ptr[4];是等价的。它定义了一个名为ptr的数组,该数组包含4个元素,每个元素都是指向整型的指针。这里的括号是可选的,因为[]的优先级高于*,所以int *ptr[4];int *(ptr[4]);表示的是同一种类型。

因此,与原定义int *ptr[4];等价的定义语句是D选项:int *(ptr[4]);

4.下边的代码,输出是多少?​​​​​​​

#include <stdio.h>
void foo(int b[][3]){     ++b;       b[1][1] = 9;}
int main(){      int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};      foo(a);       printf("%d", a[2][1]);}

解析:

在这个C语言程序中,有一个二维数组a和一个函数foo,该函数接收一个二维数组作为参数。

  1. 二维数组a被初始化为:

    1 2 3 4 5 6 7 8 9制代码

  2. main函数中,数组a被传递给函数foo。在C语言中,当二维数组作为参数传递给函数时,它实际上是通过指向其第一个元素(即第一个子数组)的指针来传递的。因此,foo函数中的参数b是一个指向包含3个整数的数组的指针。

  3. foo函数中,执行了++b;操作。这个操作使b指针指向了a的第二个子数组(即{4, 5, 6})。此时,b[0]指向{4, 5, 6}b[1]指向{7, 8, 9}

  4. 接下来,执行b[1][1] = 9;。由于b现在指向a的第二个子数组,所以b[1][1]实际上是指a[2][1](即原数组中的8所在的位置)。这行代码将a[2][1]的值更改为9。

  5. 回到main函数,执行printf("%d", a[2][1]);。由于a[2][1]的值在foo函数中被更改为9,所以输出将是9。

因此,程序的输出是9


未完待续,持续更新!

以防后边找不到可以点赞收藏下!

欢迎找我进行职业规划,超值的自我投资 -> 嵌入式软件工程师一对一指导

http://www.lryc.cn/news/490409.html

相关文章:

  • 理解原子变量之四:可见性、memory_order_acquire与 memory_order_release
  • requests的session
  • MySQL面试题补
  • Windows系统编程 - 进程遍历
  • 从零开始创建一个 Vue3+Vite+TS+Eslint项目
  • Python操作neo4j库py2neo使用(一)
  • Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(二)
  • leetcode刷题记录(四十二)——101. 对称二叉树
  • AutoDL安装docker问题
  • C++头文件大全(要是还有请帮忙)
  • 深度学习实战人脸识别
  • oracle排查长时间没提交的事务造成的阻塞案例
  • React第七节 组件三大属性之 refs 的用法注意事项
  • 工程企业需要什么样的物资管理系统?为什么需要物资管理系统?
  • 基于网页的大语言模型聊天机器人
  • 深入理解索引(一)
  • 动态规划子数组系列一>最长湍流子数组
  • MATLAB矩阵元素的修改及删除
  • 对 TypeScript 中函数如何更好的理解及使用?与 JavaScript 函数有哪些区别?
  • ubuntu搭建k8s环境详细教程
  • ubuntu安装Eclipse
  • C#里怎么样使用线程暂停?
  • 畅听FM 3.0.0 | 很有果味的电台软件,超多FM电台,支持播放本地音乐
  • 力扣面试经典 150(上)
  • 鸿蒙开发-音视频
  • 第一个autogen与docker项目
  • 第三十四篇 MobileNetV1、V2、V3模型解析
  • Python学习——字符串操作方法
  • 力扣—15.三数之和
  • 容器安全检测和渗透测试工具