- 优先级及"++"
执行代码:
int a = 1;
int b = 0;
int c = 0;
int d = (++a) * (c = 1);
则a,b,c,d的值分别是多少?
2,0,1,2
- bool 类型与float 类型使用if判断“零值”
bool flag;
if(flag) 或 if(!flag)
float x = 0.001;
if(x <= 0.001)
3.数据类型的转换
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b>6) ? puts(">6") : puts("<=6");
}
输出:
>6
有符号数与无符号数转换规则, 将转换为无符号类型。
-20 的机器数为FFFF FFECH
则a+b大于 6
4、struct结构体的长度
struct my_struct
{
char a;
int b;
char c;
}
长度为12,因为字节自动补齐, char 2字节->4字节,int 4字节,char 2字节->4字节,为12字节
5、#define
是预处理指令,在预处理过程进行简单的字符串替换,不作正确性检查。
不只是可以为类型取别名,还可以定义变量、编译开关等。
*一定要注意使用括号,保护变量的定义
对指针类型的定义一定要规避风险
6、typedef
是关键字,在编译过程中存在类型检查功能。
不能在一个函数定义里面使用typedef。
用来定义类型的别名,定义机器无关的类型
7.volatile
保证了共享变量的“可见性”
在编译过程不优化,在执行的时候不缓存,每次都需要从内存中读出来,避免资源争夺。
8、linux系统组成
主要由内核、shell、文件系统和应用程序组成。
内核、shell和文件系统形成了基本的操作系统结构。