C/C++个人易忘小知识点
extern 修饰符
在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。
//文件 a.cpp
#include <stdio.h>
int i = 3;
int out(void) {
printf("%d\n",i);
return 0;
}
//文件 b.cpp
#include <stdlib.h>
extern int p(void);
extern int i;
int main() {
p();
system("pause");
return 0;
}
详情:
C语言中extern的用法 (浅显)
C语言extern关键字用法和理解 (关键)
深入理解extern用法 (深入)
enum枚举
枚举类型通常用于为程序中的一组相关的常量取名字,以便于程序的可读性和维护性。
每个枚举常量可以用一个标识符来表示,也可以为它们指定一个整数值,如果没有指定,那么默认从 0 开始递增。
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
//等效于
#define MON 1
#define TUE 2
#define WED 3
#define THU 4
#define FRI 5
#define SAT 6
#define SUN 7
详情:
C enum(枚举)
内存对齐
C++结构体内存对齐基本原则:
1.第一个成员在结构体变量偏移量为0 的地址处,也就是第一个成员必须从头开始。
2.其他成员的偏移量为自身大小的整数倍。
3.结构体总大小对最大对齐数(通过最大成员来确定)的整数倍。
struct node{
char a;
int b;
char c;
double d;
int e;
};
// 最大对齐数 = sizeof(double) = 8
// (x)表示根据基本原则2,后一位成员为了自身偏移量我自身大小的整数倍,在前面空出x字节
// [x]表示根据基本原则3,结构体为了总大小位最大对其数的整数倍,在最后空出x字节
// siezof(node) = 1 + (3) + 4 + 1 + (7) + 8 + 4 + [4] = 32
运算符优先级
基本原则:
1.指针 > 单目运算 > 双目运算 > 多目运算 > 赋值运算 > 逗号
2.双目运算符中,算术运算 > 比较运算 > 位移运算 > 位运算 > 逻辑运算
3.同级运算符中,单目运算、条件运算、赋值运算,运算顺序遵循从右至左,其余运算符从左至右。
// 1 << 3 + 2 && 7 等价于 (1 << (3 + 2))&&7.
// a | b < c & d 等价于 a | (b < c) & d