跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

2023最新C语言经典面试题汇总

写出Bool、int、指针变量、float与“零值”比较的if语句 Bool型: if(flag)、if(!flag) int型: if(flag == 0)、if( flag!= 0) 指针变量: if(p == NULL)、if( p!= NULL) float型: const float EPSINON = 0.0001; if( (x >= -EPSINON) && (x <= EPSINON)); 设置地址未为0x67a9的整型变量的值为0xaa66

int *prt;

ptr = (int *)0x67a9; *ptr = 0xaa66;

*(int *)0x67a9 = 0xaa66;

要对绝对地址赋值,我们可以用(unsigned int*)0x10000=1234,那么要想程序跳转到绝对地址是0x10000去执行,应该怎么做?

先强制转换成函数指针:(void(*)())0x10000; 再调用它:*( ( void(*)( ) )0x10000 )(); 描述一下gcc的编译过程 gcc编译过程分为4个阶段:预处理、编译、汇编、链接 预处理:进行头文件、宏定义的替换,条件编译,删除注释,还有语义和词义的分析 编译:将预处理后的文件编译成汇编文件 汇编:将汇编文件转换二进制文件 链接:将二进制文件链接成可执行文件 #include< >和#include" "的区别 #include< >是到系统指定目录下寻找文件; #include" "是先到用户指定的目录下寻找文件,找不到就到系统指定目录下寻找 头文件中的ifndef/define/endif 干什么用 防止头文件被重复引用。

有符号与无符号的区别 有符号的数据,最高位为符号位,0表示正数,1表示负数; 无符号的数据,最高位不是符号位,只是数据的一部分。

sizeof与strlen的区别 sizeof是操作符,参数可以是数据类型,也可以是变量,在编译时就已经计算出来sizeof的结果,计算的是数据类型占内存的大小; strlen是库函数,参数只能是以‘\0’结尾的字符串,需要在运行时才能计算出来,计算的是字符串的长度; 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环

while(1)

{}

for(;;)

{}

loop: ···

goto loop; 宏定义 写一个标准宏MIN #define MIN(x,y) ( (x)<=(y)? (x):(y) ) 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SEC_YEAR (365 * 24 * 60 * 60)UL 用宏定义写出swap(x,y),即交换两数 #define swap(x,y) x=x+y;y=x-y;x=x-y; 已知一个数组table ,用一个宏定义,求出数据的 #define LENGIH sizeof(table)/sizeof(table[0]) 关键字 关键字static的作用是什么 修饰局部变量时,变量只执行一次,存在于静态存储区,不初始化内容为0,只在当前语句块有效,程序结束后才释放。

修饰全局变量时,变量存在于静态存储区,不初始化内容为0,只在当前文件有效,程序结束后才释放。

修饰函数时,该函数只能在当前文件中使用。

static函数与普通函数的区别与好处 static修饰的函数只能在当前文件使用; 普通函数可以被外部文件用extern调用; 用static修饰函数的好处是: 其他文件可以定义相同名字的函数; 该函数不能被其他文件调用; static修饰变量的作用与好处 修饰局部变量:存在于静态存储区,补初始化内容为0,作用域在当前函数/语句块; 修饰全局变量:存在于静态存储区,不初始化内容为0,作作用域只在当前文件; 用static修饰变量的好处是: 其他文件可以定义相同名字的变量; 该变量不能被其他文件调用; 关键字volatile有什么含意?

并给出三个不用的例子 volatile指的是易变的。

用以告诉编译器被volatile修饰的变量随时可能被改变。

以下场合需要用到volatile修饰: 中断服务程序中修改的供其他程序检测的变量; 多任务环境下共享的标志; 存储器映射的硬件寄存器; 关键字 _interrupt _interrupt是用来定义中断服务子程序ISR的,它有以下几个特点: ISR不能返回一个值; ISR不能传递参数;

相关文章