常见易错易混淆比较难区分的关键点1.关键字共有32个如下char、double、enum、float、int、long、short、signed、struct、union、unsigned、void、for、do、while、break、continue、if、else、goto、switch、case、default、return、auto、extern、register、static、const、sizeof不是函数特别注意、volatile易考关键字static、const、volatile、sizeof、extern2.C语言程序的一般结构有那 些顺序分支循环3.简单列举几种常用的循环结构和分支结构。循环For,while do,if goto。分支if else, switch case(注意default 的使用和break 的添加)。4.while和do while有何区别前者先判断再执行后者先执行再判断后者比前者多执行一次。5.continue和break有何需别前者结束本次循环继续下次循环后者直接推出循环。6.register有何作用?声明一个变量常驻寄存器以达到提高程序运行效率的目的在嵌入式开发中尤其常用但它是一个建议性的声明编译器会根据程序情况决定是否申请成功。7.static有何作用两方面1限定存储域2限定作用域。8.volatile关键字有什么用途声明为一个异变的变量一般的变量会暂存在处理器的缓存区中当内存中变量发生改变时处理器可能无法及时更新其变量的值导致灾难在嵌入式开发中尤其重要也可达到防止编译器优化的目的。9.指针函数和函数指针有和区别概念不同前者是一个函数返回值为指针类型后者为一个指针指向一个函数入口地址。10.简述0,‘0’,“0”,’\0’的区别。分别为数值0字符0ascii码数值为48字符串0占两个字节有‘\0’作为结束符字符串结束标志其数值等于0是绝对的0但意义不同11.使用gets时应注意哪些事项防止越界gets不检查目的地址的空间大小。12.简述堆和栈的区别前者为程序动态分配创建和销毁都需要手动完成使用完一定要销毁防止内存泄露后者为系统自动分配在函数返回时自动销毁所以不能在函数中返回变量。13.函数传参有哪些方法各有什么特色值传递和地址传递前者在传递时函数形参接受实参的拷贝所以原形参不会被改变但是大数据的拷贝会降低效率后者传递变量的地址不需拷贝但是会改变参数的值。14.全局变量和局部变量有何区别前者在静态区作用域是整个程序后者在栈区作用域仅限于函数内部。15.局部变量能否和全局变量重名可以局部变量会屏蔽全局变量。16.静态全局变量和普通全局变量有何区别存储域方面都相同都在静态区作用域方面不同前者是本文件后者是全局可见。17.静态局部变量和普通局部变量有何区别存储域相同都在静态去作用域相同都在函数内部但是声明周期不同前者声明周期为整个程序的声明周期知道程序推出自动消亡后者声明周期为一次函数调用函数返回即销毁。18.地址对齐方式有哪几种字节对齐半字对齐字对齐19.结构体对齐大小的计算struct a{char a;int b;short c;}Sizeof(a) ?结构体a的大小是4*312个字节而不是1247个字节这里主要考察内存对齐地址对齐的特点应为结构体中最大数据宽度是整型4字节所以按字对齐。关于内存对齐的题目在我博客中我会详细说明的。21.结构体和联合体的区别结构体struct各成员各自拥有自己的内存各自使用互不干涉同时存在的遵循内存对齐原则。一个struct变量的总长度等于所有成员对齐的长度之和。联合体union各成员共用一块内存空间并且同时只有一个成员可以得到这块内存的使用权(对该内存的读写)各变量共用一个内存首地址。因而联合体比结构体更节约内存。一个union变量的总长度至少能容纳最大的成员变量而且要满足是所有成员变量类型大小的整数倍。不允许对联合体变量名U2直接赋值或其他操作。22.宏函数与内联函数和普通函数的执行效率的比宏函数效率高因为是编译器在预处理阶段的替换23.C语言中注释有哪些方法/**/和 #if 0 #endif 。后者是预处理命令可以方便的对代码区进行选择编译。24.解释一下语句的含义const int a;int const a;const int *a;int * const a;int const * a const;前两个的作用是一样a是一个常整型数。第三个意味着a是一个指向常整型数的指针也就是整型数是不可修改的但指针可以。第四个意思a是一个指向整型数的常指针也就是说指针指向的整型数是可以修改的但指针是不可修改的。最后一个意味着a是一个指向常整型数的常指针也就是说指针指向的整型数是不可修改的同时指针也是不可修改的。也许你可能会问即使不用关键字const也还是能很容易写出功能正确的程序那么我为什么还要如此看重关键字const呢理由如下1). 关键字const的作用是为给读你代码的人传达非常有用的信息实际上声明一个参数为常量是为了告诉了用户这个参数的应用目的。2). 通过给优化器一些附加的信息使用关键字const也许能产生更紧凑的代码。3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数防止其被无意的代码修改。简而言之这样可以减少bug的出现。25.头文件中的 ifndef/define/endif 干什么用答防止该头文件被重复引用。26.#include file.h 和 #include “file.h” 有什么区别对于#include file.h 编译器从标准库路径开始搜索 file.h对于#include “file.h” 编译器从用户的工作路径开始搜索 file.h