1、观察以下代码,结果会输出什么?

int main()
{
    int num1 = 4;
    int num2 = 5;
    if(num1 = 4)   num2++;
    if(num2 = 9)   num2++;
    printf("%d\n",num2);
    return 0;

}

参考答案:10

分析:注意判断条件是赋值号 “=”,而不是判等号 “==”

2、C语言源代码中,死循环的有几种写法?

参考答案:

有4种常见的写法:

(1)while(1) {              }

(2)do{                }while(1);

(3)for(;;){                      }

(4)for(;1;){                    

3、单片机开发中,C程序的编译步骤有哪些阶段?每一阶段都做了什么?

参考答案:

C程序的编译步骤有4步。

(1)预处理阶段,

       该阶段进行宏定义的文本替换、头文件展开、条件编译、删除注释

       该阶段会将将.c文件转成预处理文件,一般是.i文件,即:xx.c---->xx.i文件

注意:该阶段不会进行语法检测,所以语法报错不会出现在该阶段,这是面试题中容易踩的坑

(2)编译阶段

        该阶段会进行有发检测、代码优化

        该阶段会将预处理文件,编译生成汇编文件,一般是.s文件。即:xx.i---->xx.s文件

        注意:语法报错发生在这一阶段

(3)汇编阶段

        该阶段主要将汇编文件翻译生成机器码(二进制文件或者是目标文件),一般是.o或者.out

        文件   即:xx.s---->ss.o/xx.out

(4)链接生成可执行文件

        该阶段,将多个目标文件和库文件合并,最终生成一个可执行文件,

       一般是.hex或者.bin文件

     即:多个.o文件合并成一个.hex文件,用于单片机程序的烧录

4、define宏常量和const常量有什么区别?

参考答案:

首先,两个关键字都可以定义常量,值都不可以改变,其次区别如下:

1、define宏常量     定义常量的原理是,预处理阶段进行字符串的替换,不会分配内存,也没有类型保护,一般定义在函数体的外部,作用域是整个程序(即所有的.c文件)

2、const常量  定义常量的原理是,限制了变量的权限为“只读”权限,定义时需要分配内存,有类型保护,一般定义在函数体的外部,作用域是当前函数体内部。

5、观察下面代码,会输出什么内容?为什么?

#include <stdio.h>
#include <string.h>
int main()
{
    char arr[10];
    printf("%d\n", strlen(arr));
    printf("%d\n", sizeof(arr));
    printf("%d\n", arr[0]);
    return 0;

}

参考答案: 随机值   10   随机值

分析:

(1)strlen() 与数组是否初始化有关系,如果初始化,初始化的字符串的字符的个数

 如果没有初始化,结果是随机值

(2)sizeof()与数组是否初始化没有关系,结果就是数组在计算机内存中所占的字节数,该题中应该是 10

(3)由于局部变量数组没有初始化,计算机会初始化为随机值,所以arr[0]也是随机值

6、在32位操作系中,运行以下代码,会输出什么?

#include <stdio.h>
#include <stdlib.h>

void fn1(char arr[50])
{
    //......
    printf("%d\n",sizeof(arr));
}


int main(){
    
    char  st[50];
    fn1(st);
    int *ptr = (int *)malloc(50);
    printf("%d\n",sizeof(ptr));
    return 0;
}

参考答案:

4        4

分析:

(1) 数组名作为参数进行传递,传递进去的是数组的首元素地址,是个指针,对于32位操作系统而言,指针就占4个字节

(2)str是一个指针,指向连续50个字节内存的首地址,指针在计算机内存中占4个字节

更多推荐