嵌入式笔试刷题专栏(第四天)

11. 写一个“标准”宏 MIN(A, B),并说明表达式 least = MIN(*p++, b) 返回什么值?

✅ 答案:

#define MIN(A, B) ((A) < (B) ? (A) : (B))

  • 使用宏时需要注意参数的副作用
  • least = MIN(*p++, b) 会出现宏展开:
least = ((*p++) < (b) ? (*p++) : (b));

这会导致 p++ 执行两次,不是你想要的行为,可能造成 未定义行为逻辑错误

✅ 正确做法:使用内联函数或避免带副作用的表达式作为参数。

12. 使用变量 a 给出以下定义:

一个整型数

int a;

一个指向整型数的指针

int *a;

一个指向指针的指针,它指向的指针是指向一个整型数

int **a;

一个有10个整型数的数组

int a[10];

一个有10个指针的数组,该指针是指向一个整型数的

int *a[10];

一个指向有10个整型数数组的指针

int (*a)[10];

一个指向函数的指针,该函数有一个整型参数并返回一个整型数

int (*a)(int);

一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

int (*a[10])(int);

13. 简要叙述关键字 staticconst 的含义与作用。

✅ 答案:

  • static函数内部变量:保持其值,生命周期延长到程序结束。文件内部函数/变量:限制作用域,仅在当前文件中可见(避免命名冲突)。
  • const用于定义只读变量,防止被修改。例如:const int a = 5; 表示变量 a 不可再被赋值。

14. 全局变量与局部变量的区别?

作用域

文件内或整个程序

函数或语句块内部

生命周期

程序运行期间一直存在

函数运行时创建,用完释放

存储位置

数据段(.data/.bss)

栈区(stack)

初始值

默认值为 0

不初始化为随机值

15. 在不使用第三方变量的情况下交换两个变量的值(3种方法)

✅ 方法一:加法法

a = a + b;
b = a - b;
a = a - b;

✅ 方法二:异或法

a = a ^ b;
b = a ^ b;
a = a ^ b;

✅ 方法三:乘除法(适用于非 0 值)

a = a * b;
b = a / b;
a = a / b;

16. 写出至少 20 个常用 Linux 命令,含用法与例子

ls

列出文件

ls -l

列出详细信息

cd

改变目录

cd /etc

进入 /etc 目录

pwd

显示当前路径

pwd

mkdir

创建目录

mkdir test

创建 test 文件夹

rm

删除文件或目录

rm -rf test

强制删除 test

cp

拷贝文件

cp a.txt b.txt

复制 a 为 b

mv

移动或改名

mv a.txt c.txt

改名为 c.txt

touch

创建空文件

touch a.txt

cat

显示文件内容

cat a.txt

grep

文本搜索

grep "main" a.c

搜索 main

find

查找文件

find . -name "*.c"

ps

显示进程

ps -ef

所有进程

kill

杀死进程

kill -9 1234

chmod

修改权限

chmod +x a.out

chown

修改属主

chown user file

df

查看磁盘空间

df -h

du

查看目录大小

du -sh *

top

实时监控进程

top

ifconfig

查看网络信息

ifconfig

ping

网络测试

ping www.baidu.com

17. 下面的代码输出什么?为什么?

void foo(void) {
    unsigned int a = 6;
    int b = -20;
    (a + b > 6) ? puts("> 6") : puts("<= 6");
}

✅ 答案:

输出结果为:

> 6

解释:

  • a = 6 (无符号), b = -20 (有符号)
  • a + bint 被提升为 unsigned int-20 转换为无符号整数的大数值
  • 所以结果非常大,自然大于 6

18. 比较以下两种方式,哪种更好?并举例说明

#define dPS struct s *
typedef struct s * tPS;

✅ 答案:

推荐使用 typedef

  • #define文本替换,容易出错,不能调试
  • typedef类型定义,可读性更好,有类型检查
  • 例如:
tPS p1, p2;  // 都是 struct s *

而:

#define dPS struct s *
dPS p1, p2;  // 实际是 struct s *p1, p2; ⇒ p2 是 struct s,不是指针!

19. 求下列代码中 a, b, c 的值:

int a = 5, b = 7, c;
c = a+++b;

✅ 答案:

解析:a+++b 被解析为 a++ + b,即先 a+++ b

  • c = 5 + 7 = 12
  • a = 6, b = 7, c = 12

20. 下列代码打印的值是多少?

#include<stdio.h>

int main() {
    unsigned long long b = 1;
    int a = 100;
    printf("%d,%d", b, a);
    return 0;
}

✅ 答案:

输出:未定义行为

  • %d 用于打印 int,但 bunsigned long long,类型不匹配
  • 正确写法:
printf("%llu, %d", b, a);

全部评论
mark一下
点赞 回复 分享
发布于 04-25 21:45 黑龙江

相关推荐

评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务