学习笔记(一)


嵌入式开发

面试基础题(一)

  1. 嵌入式系统中经常要用到无限循环,请问如何用C编写死循环?

    答案:

  • while(1){} 或 for( ; ; )
  1. 请问程序中的局部变量、全局变量、动态申请的数据分别存储在于哪里?

    答案:

  • 程序的局部变量存在于栈区;

  • 全局变量存在于静态区;

  • 动态申请数据存在于堆区。

  1. 请问关键字const有什么含义?

    答案:

  • 只读

  • 使用关键字const也许能产生更紧凑的代码

  • 使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。

  1. 请问什么是预编译,何时需要预编译?

    答案:

  • 总是使用不经常改动的大型码体;程序由多个模块组成,所有模块都使用一组标准的包含头文件和相同的编译选项。在这总情况下,可以将所有包含文件预编译为一个头文件。
  • 预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。
  1. 请问局部变量能否和全局变量同名?

    答案:

  • 能,局部变量会屏蔽全局变量。
  • 局部变量可以与全局变量同名,在函数内引用这个变量事时,会用到同名的局部变量,而不会用到全局变量。
  1. 请问应用和指针由什么区别?

    答案:

  • 引用必须被初始化,指针不必。
  • 引用初始化后不能被改变,指针可以改变所指对象。
  • 不存在指向空值的引用,但是存在指向空值的指针。
  1. 一个32位的机器,该机器的指针是多少位?

    答案:

  • 指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32位的数据总线,所以指针的位数就是4个字节。
  1. 请问一下代码有什么问题:

    int mian(){
      
        char a;
        char *str=&a;
        strcpy(str,"hello");
        print(str);
        return 0;
    
    }
    

    答案:

  • 没有为str分配内存空间,将会发生异常,问题出现将在一个字符串复制进一个字符串指针所指地址,虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。