摘要:函数指针的优点 1.灵活调用性设计之初,程序员可能不知道一些方法最后会怎么去具体的实现,就可以使用函数指针预留,后期直接挂接进来。 2.更好的封装编写模块时,可以将一些方法以函数指针的形式从外部传入,不需要具体的函数实现,更好的封装和模块化。模块运行时只需要关心指针的有效,不需要关心函数的具体实现
阅读全文
摘要:char * a= "1234"; 此时不能通过解引用来修改a指向内存的值,因为它指向常量区;当然,可以更改a的指向
阅读全文
摘要:1 char a[] = { 'c','+','+' }; 2 char c[] = "c++"; 3 cout << strlen(a) << endl; 4 cout << strlen(c) << endl; 5 cout << sizeof(a) << endl; 6 cout << siz
阅读全文
摘要:C/C++共有 static修饰局部变量(比如函数中的局部变量),此时这个变量的位置就在全局静态区,但仍旧只能在函数内部访问,比如 1 #include <iostream> 2 using namespace std; 3 4 void test(){ 5 static int a=0; 6 a+
阅读全文
摘要:栈帧在程序中负责保存程序的局部变量、参数与函数最终执行完后的返回地址。我们在写C语言代码时经常会接触到的一个概念“局部变量”就是由栈帧来负责保存维护的。 模拟栈帧过程非常好的文章:https://blog.csdn.net/weixin_43815930/article/details/104823
阅读全文
摘要:inline、volatile、#define、typedef、const、static const 需要强调的是const的意思是只读,意义在于不希望程序员对它进行修改,事实上它的值是会变的,比如一些硬件的状态寄存器 常量指针:比如整型指针指向的是一个整型,所以常量指针说的是指向一个常量的指针,那
阅读全文
摘要:断言assert 就是对表达式进行判断,如果条件不成立就会调用abort()中止程序运行,对于debug空指针有奇效,但是release版本不会用 是一个宏而非函数 五个要点: 1.在函数开始时,监测参数是否合法。2.每个断言只能检测一个条件。因为条件过多,当出现错误时,无法判断是哪个条件出错。3.
阅读全文
摘要:这里贴一篇讲得很好的 https://blog.csdn.net/weixin_46098577/article/details/116596183?ops_request_misc=%257B%2522request%255Fid%2522%253A%25221662084446167816839
阅读全文
摘要:这篇讲得很好 https://blog.csdn.net/sjp11/article/details/123899141?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166201751616781790748003%2522%252
阅读全文
摘要:安全性 首先引用要比指针要安全,因为引用不能更改绑定,但是指针可以更改指向,此外指针可以有多级,但是引用一般只有一级。在使用指针的时候,我们往往需要使用断言,判断指针是不是空指针,访问空指针是会造成程序crash的。 此外类中有引用成员,当不同对象的引用成员绑定同一个类外变量,在析构的时候是不会发生
阅读全文
摘要:为什么要有深拷贝? 当类的成员中有引用类型,那么拷贝的时候,比如 1 class A{ 2 public: 3 int * addr; 4 } 5 A a; 6 A a1(a); 7 //此时 a和a1中的addr成员,都将同时引用同一块内存,那么当析构的时候,就会出现free after free
阅读全文
摘要:问题:调用拷贝构造的时候,能不能用值传递参数? 先说结论:调用拷贝构造的时候,不能用值传递参数,应该用引用传递,否则会导致无限调用拷贝构造,从而栈溢出 原理:值传递的时候,会用实参来构造形参,那么构造形参的过程中又会call拷贝构造,以此内推,无限循环 拷贝构造函数被调用的三种时机: 用类的一个对象
阅读全文
摘要:多态和虚函数 先说说重载,重载要求函数名相同,返回值(返回值不同不构成重载)和形参不用相同,我们常用的重载是一种静态的多态,为什么C语言不能够重载呢?这与c语言的编译器有关,体现在符号表中,c语言的函数在编译时不会像C++那样把参数也添加到对应的符号表里 而多态当中,派生类中对于基类虚函数的重写,要
阅读全文
摘要:delete是根据指针的类型来调用析构的。当delete派生类对象填充的派生类指针,那么delete这个指针,先调用派生类析构,再调用基类析构。当多态环境下,delete指向派生类对象的基类指针,则出现只调用基类析构,而不调用派生类析构,从而导致内存泄漏。这里产生的问题是,调用的基类析构能不能删除派
阅读全文