问题
什么是宏?
- 函数宏
```cpp
include
define MIN(A, B) (A < B ? A : B)
define TYPE(type, name) type name##_##type##_type
int a = MIN(1, 2); // TYPE(int, a) => int a_int_type int main() { printf(“%d”, a); printf(“Hello, World!”); return 0; }
- 对象宏```cpp#define PI 3.14
作用:
在有数据结构体的时候,可以实现防止每个接口执行一次,减少工作量。
是一种分割链接方式,它的作用是先分隔,然后进行强制连接
注意:
- 尽量用cost,enum,inline替换define
define编译时错误信息有问题.
如果是定义常量字符串,则必须要 const 两次,目的是为了防止指针所指内容和指针自身不能被改变
const char* const name = "test";
// 定义常量
class Stdudent {
private:
static const int num = 10;
int scores[num];
};
const int Student::num; // static 成员变量,需要进行声明
//
class Student {
private:
enum: { num: 10 };
int scores[num];
}
- 用enum 代替#define
- 用 inline 替换#define ```cpp // 与预期不符合 int a = 6, b = 5; int max = MAX(a++, b); std::cout << max << std:: endl; std::cout << a << std::endl;
//
template
<a name="Ai6iL"></a>
### 动态链接库是?
在Nodejs中引入一个C++模块的过程,实际上Node.js在运行时引入了一个动态链接库的过程。<br />*.node后缀,十六进制打开后,文件头的标识位是0x7F454C46,ASCII码是指不可见空字符(ASCII码为0x7F)后面跟着“ELF”,这就是一个Linux动态链接库的标识
<a name="U8z7I"></a>
### <<,>>的作用
输入输出流或者位运算<br />endl代表换行<br />count是ostream类的对象<br />cin是istream类的对象
流【Stream】 Operator【操作符】 Functions【函数】<br />cin >> cin.get 从流中读取并取走一个字符<br /> cin.getline()从流中读取字符,直至行尾或指定的分隔符<br /> cin.ignore()从流中读取并舍弃指定数量的字符<br />cout << cout.put()将字符写到流中【无格式】<br /> count.flush() 将流中的缓存内容全部输出
```cpp
流提取运算符
流插入运算符
<<
指针
一个变量,存储另一个变量的地址
定义指针
int a = 0; int * p; p = &a;所占用内存空间
32位操作系统,4个字节;64位操作系统,占8个字节空间;
cout << sizeof(int *) << endl;
- 空指针和野指针
不是申请的空间,不能访问
空指针
定义: 内存编号为0 的空间
用途:初始化指针变量
注意: 指向的内存不可以访问
0~255之间的内存编号是系统占用,不可访问
int * p = NULL;
*p = 100; // nullptr
野指针
定义:指向非法的内存空间
内存地址没有申请是不可以访问的
int * p = (int *)0x1100;
cout << *p << endl;
const 修饰指针
- const修饰指针 - 常量指针
- const修饰常量 - 指针常量
- const修饰指针,又修饰常量
常量指针 const int p = &a 指向的值不可以修改
指针常量 int const p = &a 值可以改,指向不可以变
指针的指向和值都不可以修改
- 指针数组 ```cpp int arr[] = {1,2,3,4,5} int p = arr; for (int i = 0; i < 10; i++) { cout << p << endl; *p++; } // +1可以进行偏移
- 指针和函数
```cpp
// 利用指针进行地址转递
void swap(int * a, int * b) {
let temp = *a;
int
}
数据结构体
typede struct {
int temp = *a;
int *a = *b;
int *b = temp;
}
int a = 10;
int b = 20;
swap(&a,&b);
.cc与.cpp
unix系统中常用.cc,非unix系统常用.cpp
.h头文件
