一.静态库的创建
在项目属性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
。在类定义中,如果没有显式提供构造函数的实现,编译器会自动生成默认构造函数的实现。