基础知识
文章平均质量分 61
huangyitai
这个作者很懒,什么都没留下…
展开
-
C++面试宝典:类的大小(sizeof)
类的大小空类的大小 sizeof = 1因为实例化就是为内存中开辟一个独一无二的地址,至少是一个字节,所以一个字节大小其实就是占位置的一个字节。class node {};int main() { node *tmp = new node(); cout<<sizeof(tmp)<<endl; // output = 4,指针的大小是4 cout<<sizeof(*tmp)<<endl; // output = 1,原创 2020-05-28 01:00:34 · 224 阅读 · 0 评论 -
C++面试宝典:大端小端以及判定方法
一、概念1、大端模式2、小端模式二、怎么判断是大端还是小端int main(){ union{ short i; char a[2]; } u; u.a[0] = 0x11; u.a[1] = 0x22; printf ("0x%x\n", u.i); // 0x2211 为小端 0x1122 为大端}...原创 2020-05-06 17:35:19 · 294 阅读 · 0 评论 -
C++面试宝典:static和虚函数表
一、类里面的 static 内存分布static修饰的是1、全局变量 2、局部变量 3、类里面的数据成员 4、类里面的成员函数对于类里面的成员变量来说,对于所有的类来说都是可以被使用的,在类对象实例化之前就已经存在,存在全局数据区。对于类里面的成员函数来说,静态成员函数不和任何的对象相关联,在text段(代码段)分配内存。二、类里面的 virtual 内存分布对于virtual来说,虚...原创 2020-05-06 15:59:53 · 247 阅读 · 0 评论 -
C++面试宝典:头文件引用的顺序
头文件引用的顺序当我们有多个头文件的时候,特定情况下要注意引用的顺序。如果要在文件a.h中声明一个在文件b.h中定义的变量,而不引用b.h。那么要在a.cpp文件中引用b.h文件,并且要先引用b.h,后引用a.h,否则汇报变量类型未声明错误。例如:文件a.h:node a;文件b.h:struct node{ int x,y;};引用 a.h 和 b.h 的 cpp ...原创 2020-04-29 00:11:37 · 781 阅读 · 0 评论 -
C++面试宝典:realloc
如果是将分配的内存扩大,则有以下情况:1)如果当前内存段后面有需要的内存空间,则直接扩展这段内存空间,realloc()将返回原指针。2)如果当前内存段后面的空闲字节不够,那么就使用堆中的第一个能够满足这一要求的内存块,将目前的数据复制到新的位置,并将原来的数据块释放掉,返回新的内存块位置。3)如果申请失败,将返回NULL,此时,原来的指针仍然有效。...原创 2020-04-26 12:16:12 · 104 阅读 · 0 评论 -
C++面试宝典:extern C
extern Cextern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。这个功能...原创 2020-04-25 15:23:08 · 97 阅读 · 0 评论 -
C++面试宝典:const char* 组合详解
1、const char *p;声明一个指向字符或字符串常量的指针,p所指向的内容不可修改。char tmp[4] = {"123"};const char *p = tmp;p[0] = '2'; // 编译器会报错,因为const修饰的是char,内容不可更改2、char const *p;同上3、char * const p;声明一个指向字符或字符串的指针常量,即不可以修...原创 2020-04-24 16:38:41 · 2607 阅读 · 0 评论 -
C++面试宝典:i++ 和 ++i 的区别以及实现
++i 和 i++的实现1、++i 实现:int& int::operator++(){ *this +=1; return *this;}2、i++ 实现:const int int::operator(int){ int oldValue = *this; ++(*this); return oldValue;}...原创 2020-04-24 15:50:45 · 85 阅读 · 0 评论 -
C++面试宝典:智能指针简介(shared_ptr实现)
智能指针C++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被11弃用。为什么要使用智能指针:智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调...原创 2020-04-24 13:38:03 · 441 阅读 · 0 评论 -
C++面试宝典:引用和指针的区别
1、指针有自己的一块空间,而引用只是一个别名;2、使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小;3、指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象的引用;4、作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引用的修改都会改变引用所指向的对象;5、可以有const指针,但是没有const引用;6、指针在使用中可以指向其它对象,但是引用只...原创 2020-04-24 13:06:26 · 172 阅读 · 0 评论 -
C++面试宝典:__FILE__,__func__,__LINE__
C语言中,__FILE__,__func__,__LINE__常用于logout,debug调试。注意:其使用不需要定义,__FILE__指示当前文件名,__func__指示当前函数名,__LINE__指示当前运行到的行数。printf("%s %d\n",__FILE__,__LINE__);...原创 2020-04-22 20:40:29 · 394 阅读 · 0 评论 -
C++面试宝典:calloc
1、函数名: calloc函数原型:void *calloc(size_t n, size_t size);功能:在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。n: Number of elements 成员数量size: Length in bytes of each element 每个成员字节长度struct...原创 2020-04-22 20:34:11 · 328 阅读 · 0 评论 -
C++面试宝典:STL中resize和reverse的区别
STL中resize和reverse的区别resize():改变当前容器内含有元素的数量(size()),eg: vector<int>v; v.resize(len);v的size变为len,如果原来v的size小于len,那么容器新增(len-size)个元素,元素的值为默认为0。当v.push_back(3);之后,则是3是放在了v的末尾,即下标为len,此时容器是siz......原创 2020-04-21 22:58:11 · 447 阅读 · 0 评论 -
C++面试宝典:map与unordered_map的区别
map和unordered_map的差别需要引入的头文件不同map: #include < map >unordered_map: #include < unordered_map >内部实现机理不同map: map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),红黑树具有自动排序的功能,因此map内部的所有元素都是有序的,红黑...转载 2020-05-02 11:31:23 · 387 阅读 · 0 评论 -
C++面试宝典:STL容器利用迭代器删除元素
STL容器利用迭代器删除元素小结1、关联容器对于关联容器(如map, set, multimap, multiset), 删除当前的iterator, 仅仅会使当前的iterator失效,只要在erase时,递增当前的iterator即可。这是因为map之类的容器,使用了红黑树来实现,插入,删除一个结点不会对其他结点造成影响。使用方式如下例子:int main() { set<...原创 2020-04-21 20:20:10 · 228 阅读 · 0 评论