一.静态库的创建
- 在项目属性c/c++里面,选用无预编译头,创建头文件与cpp文件,需要注意release模式下还是debug模式,在用库时候要与该模式相匹配,库的函数实现是外界无法看到的,最后在要使用的项目里面导入.h文件和.lib文件
二.使用一个循环给二维数组赋值
- 行数 : 第几个元素 / 原列数
- 行数 : 第几个元素 % 原列数
int nums[3][4];
for(int i = 0 ;i<12;i++){nums[i/4][i%4] = i+1;}
三.断言
- 程序的接口传入进去的数据可能是非法的,要想当传进去的值为非法值时候,给出提示,可以使用断言
- 对非预期错误使用断言
- 如果断言的条件返回错误,则终止程序执行
- 头文件 #include <assret.h>
- 原型定义
- void assret(int expression);
- 语句 assert(数据正常时候的条件)

四.什么是空指针?
- 空指针,就是值为零的指针,(任何程序数据都不会存储在地址为0的内存块中,他是被操作系统预留的内存块,是不能访问的),int *p =NULL;
- 初始化为空指针,避免访问非法数据
- 指针不在使用时,可以设置为空指针
- 表示这个指针还没有具体的指向,使用前进行合法性判断
int *p =NULL;
if(p){//指针不为空,对指针进行操作
}
五.指针与指针相减
- 指针的相加是不行的,被禁止的
- 指针与指针做减法适用的场合,两个指针都指向同一个数组,相减的结果为两个指针之间的元素数目,而不是两个指针之间相差的字节数
- 如果两个指针指向不同数组,则相减的结果是相差的字节数,但是这样的相减没有意义
- 不同类型的指针不允许相减
六.const和指针
- const 写在int之前,则限定不能通过*指针去改变该指针指向的值,但是可以指向别的指针
- const 写在int之后,则限定可以通过*指针去改变该指针指向的值,但是不能指向别的指针
- 两个const一个写在int前,一个写在变量名前,限制指针不能指向别的指针,并且不允许修改指针指向的值
- 总结 : 看const离类型(int)近,还是理变量名近,离谁近,就修饰谁,谁就不能变
#include<iostream>
using namespace std;int main() {int wife = 30;int girl = 18;//第一种 : 渣男型,普通指针可以随意更改指向与指向地址的值int* zha_nan = &wife;cout << *zha_nan << endl;zha_nan = &girl;cout << *zha_nan << endl;//第二种 : 直男型,以自我为中心,可以改变指向,但是不可以改变指向的地址的值const int* zhi_nan = &wife;//*zhi_nan = 25;//报错,不能改变值zhi_nan = &girl;cout << *zhi_nan << endl;//第三种 : 暖男型,专一,不可以改变指向,但是可以改变指向的地址的值int* const nuan_nan = &wife;//nuan_nan = &girl;//报错,不能改变指向*nuan_nan = 25;cout << *nuan_nan << endl;//第四种 : 超级暖男型,超级专一,不能改变指向,也不能改变指向地址的值const int* const _super_nuan_nan = &wife;//*_super_nuan_nan = 25;//报错,不能改变指向地址的值//super_nuan_nan = &girl;//报错,不能改变指向//总结 : const理谁近就修饰谁,理(int)近,则修饰该指针的值不能改变,修饰变量,// 则该指针不能在指向别的变量了
}
七.查看变量类型的函数
- 头文件 #include <typeinfo>
- 语法 : typeif(变量名).name()
#include <iostream>
#include <typeinfo>using namespace std;int main() {int i = 10;int* k = &i;cout << typeid(k).name()<< endl;
}
八.C++类中的默认构造函数显示声明
- 显示声明方式 : 类名 () = default;
- 作用,如果没有显示声明,类中如果没有其他构造函数的话,系统会默认声明默认构造函数,如果显示声明了,系统则不会声明默认构造函数,但是当加上该语法之后,即使类中有其他构造函数,系统仍然会声明一个默认的构造函数
- 需要注意的是,
salary_data()
的定义应该在类的声明中进行,并且必须是构造函数的声明之一。在类声明中可使用 = default
,但在类的定义(实现)中则不能使用 = default
。在类定义中,如果没有显式提供构造函数的实现,编译器会自动生成默认构造函数的实现。