zoukankan      html  css  js  c++  java
  • 嵌入式开发er的C语言能力自测(面试)题top 16

    准备面试刷到的,链接里是原文和答案: (a-c-test-the-0x10-best-questions-for-would-be-embedded-programmers)

    这里我先只给出问题,可以作为能力自测,然后再去原文看答案。

    1. 使用#define,定义一个明示变量(原文为manifest constant,“简单的宏主要用来定义那些被Kernighan和Ritchie称为“明示常量”(manifest constant)的东西。”)来表示一年中有多少秒,不考虑闰年。

    2. 写出标准的MIN宏。也就是说,这个宏接收两个变量参数且返回其中较小的一个。

    3. 预处理指令#error的用途?

    4. 无限循环经常出现在嵌入式系统中。在c中如何实现无限循环?

    5. 使用一个变量a, 写出下面定义的表达式。

    (a)一个整数

    (b)一个指向整数的指针

    (c)一个指针指向一个整数指针

    (d)一个拥有十个整数的数组

    (e)一个拥有十个整数指针的数组

    (f)一个指针指向有十个整数的数组

    (g)一个函数指针:该函数有一个整数参数且返回一个整数

    (h)一个有十个函数指针的数组: 该函数有一个整数参数且返回一个整数

    6. static关键字的用法(3种)

    7. const关键字是什么意思?

     下列表达式(不完整)是什么意思?

    1 const int a;
    2 
    3 int const a;
    4 
    5 const int *a;
    6 
    7 int * const a;
    8 
    9 int const * a const;

    8. 关键字volatile是什么意思?给出他的三种不同用法。

    (a)一个参数可以同时被定义为const和volatile嘛?解释下为什么。

    (b)一个指针能被定义成volatile吗?解释下为什么。

    (c)下面的函数有什么问题?

    1 int square(volatile int *ptr) {
    2 
    3   return *ptr * *ptr;
    4 
    5 }

    9. 嵌入式系统总是会要求使用者对变量或者寄存器进行位操作。给定一个整数变量a, 给出两部分代码。第一个置位a的第三比特。第二个清除a的第三比特。两种情况下,其他比特不能被改变。

    10. 嵌入式系统经常需要编程人员访问内存的特定位置。在一个项目中,要求设置一个位于内存地址0x67a9的整数变量的值设为0xaa55。编译器为纯ANSI编译器。写出代码完成这个任务。

    11. 中断是嵌入式系统中非常重要的部分。所以很多编译器厂商提供了标准c的扩展来支持中断。通常,这个新的关键字为“__interrupt”。下面的代码使用“__interrupt”定义了一个中断服务程序。给出你的评论。

    1 __interrupt double compute_area(double radius) {
    2 
    3   double area = PI * radius * radius;
    4 
    5   printf("nArea = %f", area);
    6 
    7   return area;
    8 
    9 }

    12. 下面程序的输出是什么?为什么?

    1 void foo(void) {
    2 
    3     unsigned int a = 6;
    4 
    5     int b = -20;
    6 
    7     (a + b > 6) ? puts("> 6") : puts("<= 6");
    8 
    9 }

    13.对于下面的代码你有什么评论?

    1 unsigned int zero = 0;
    2 
    3 unsigned int compzero = 0xffff;  /*1's complement of zero */

    14. 即使不是很常见,但是有些嵌入式系统会从堆(heap)动态申请内存。在嵌入式系统中动态申请内存有什么问题?

    下面的代码会输出什么?为什么?

     1 char *ptr;
     2 
     3 if ((ptr = (char *)malloc(0)) == NULL) {
     4     puts(“Got a null pointer”);
     5 
     6 }
     7 
     8 else {
     9     puts(“Got a valid pointer”);
    10 
    11 }

    15.

    1 #define dPS  struct s *
    2 
    3 typedef struct s * tPS;

    哪一种方法你更偏爱?为什么?

    16. 下面的代码合法吗?如果合法代码执行了什么?

    1 int a = 5, b = 7, c;
    2 
    3 c = a+++b;
    -------------BE SEXY AND BRAINY---------
  • 相关阅读:
    Oracle11g客户端安装记要202011+Navicat Premium 连接Oracle 数据库
    设计模式之 ==> 观察者计模式
    设计模式之 ==> 责任链计模式
    一个.NET Core下的开源插件框架
    JavaScript判断文件是否为UTF-8编码
    Postgresql 设置字段搜索支持中文排序
    springboot docker 显示中文乱码问题
    linux 更新系统时间
    怎么让网易云音乐等音乐软件的歌词在MacBook Pro的 touch bar(触摸栏)上显示
    数仓:解读 NameNode 的 edits 和 fsimage 文件内容
  • 原文地址:https://www.cnblogs.com/yuxiaolan/p/15678917.html
Copyright © 2011-2022 走看看