欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

面试前的一波复习

程序员文章站 2022-06-01 15:53:24
...

1、位运算没有短路规则,每个操作数都参与运算
2、位运算的结果为整数,而不是1或0
3、位运算优先级高于逻辑运算优先级
4、位运算符只能用于整数类型
5、左移和右移运算符的右操作数范围必须为[0, 31]。

1、逻辑表达式遵从短路规则
2、在&&与||混合运算时:(&&优先级高于||)
- 整个表达式被看作||表达式
- 从左向右先计算&&表达式
- 最后计算||表达式
3、逻辑非!运算符只认得0
- 碰见0返回1,否则统统返回0

printf函数的第一个参数被当成字符串内存地址:

printf("\n");

面试前的一波复习

C语言中的反斜杠(\)同时具有接续符和转义符的作用
- 作为接续符使用时可以直接出现在程序中
- 作为转义符使用时需许出现在单引号或双引号之间

1、编译器在编译过程中使用空格替换整个注释
2、字符串字面量中的//和//不代表注释符号

1、enum值是可以根据需要自定义的整形值
2、enum类型的变量只能取定义时的离散值

typedef重命名的类型:
- 可以在typedef语句之后定义
- 不能被unsigned和signed 修饰

1、柔性数组即大小待定的数组
2、C语言中可以由结构体产生柔性数组
3、C语言结构体中的最后一个元素可以是大小未知的数组

struct SoftArray
{
    int len;
    int array[];    
};
array仅是一个待使用的标识符,不占用存储空间

1、大端模式:数据的高字节保存在内存的低地址,数据的低字节保存在内存的高地址中
2、小端模式:数据的高字节保存在内存的高地址,数据的低字节保存在内存的低地址中。

1、在现代C语言编译器中,修改const全局变量将导致程序崩溃
2、现在C编译器中的const将具有全局生命周期的变量存储于只读存储区
3、静态变量同上

C语言中的字符串字面量存储于只读存储区中,在程序中需要使用const char*指针

const char* s = "D.T";

面试前的一波复习

1、volatile可理解为“编译器警告指示字”
2、volatile告诉编译器必须每次去内存取变量值
3、volatile主要修饰可能被多个线程访问的变量
4、volatile也可以修饰可能被未知因素更改的变量

1、C语言规定只有相同类型的指针允许相互赋值
2、void*指针作为左值用于接收“任意”类型的指针
3、void*指针作为右值使用时需要强制类型转换

case语句中的值只能是整型或字符型

1、register关键字指明将局部变量存储于寄存器中;
2、register只是请求寄存器变量,但不一定请求成功
3、不能用&运算符获取register变量的地址

#include <stdio.h>

register int a;  // error

int main()
{
    register char var;
    printf("0x%08x\n",&var);  // error  
    return 0;   
}

1、extern用于声明“外部”定义的变量和函数
- extern变量在文件的其它地方分配空间
- extern函数在文件的其它地方定义
2、extern能提示编译器按标准C方式编译程序

浮点数的转换:
- 将浮点数转换成二进制
- 用科学计数法表示二进制浮点数
- 计算指数偏移后的值
面试前的一波复习

符号位+指数位+小数位;(在小数位后面补0)

宏表达式中不能出现递归定义
面试前的一波复习

命令行定义宏:

gcc -Dmacro=value file.c或
gcc -Dmacro file.c

间接包含同一个头文件是否会产生编译错误?看视频22课

实际工程中条件编译主要用在两种情况:
- 不同的产品线公用一份代码
- 区分编译产品的调试版和发布版

#error用于生成一个编译错误消息
#error message
message不需要用双引号包围

#error是一种预编译器指示字
#error可用于提示编译条件是否满足
#error用于自定义一条编译错误

#line用于强制指定新的行号和编译文件名


#pragam用于指示编译器完成一些特定的动作
message用于条件编译中可提示代码的版本信息

#if defined(ANDROID20)
    #pragam message("Compile Android SDK 2.0...")
    #define VERSION "Andriod 2.0"
#endif

#pragma once用于保证头文件只被编译一次

面试前的一波复习

内存对齐:
- 第一个成员起始于0偏移处
- 每个成员按其类型大小和pack参数中较小的一个进行对齐
- 偏移地址必须能被对齐参数整除
- 结构体成员的大小取其内部长度最大的数据成员作为其大小
- 结构体总长度必须为所有对齐参数的整数倍