- 博客(28)
- 资源 (2)
- 收藏
- 关注
原创 【细节】
1.一个C程序的执行是从(本程序的main函数开始,到main函数结束)。2. sizeof是操作符。3.char c[] = "\t\v\\0will\n"; printf("%d", strlen(c));输出??(9)使用strlen函数时,遇到空字符结束。 strlen函数用来统计字符串中一共包含多少个字符,一个转义字符算作一个字符,依次是\t、\v、\\、0、w、i、l...
2019-06-10 21:22:16 172
原创 《基础知识——C++11新特性》
C++11有哪些新特性? 【占位】参考回答:C++11 最常用的新特性如下:auto关键字:编译器可以根据初始值自动推导出类型。但是不能用于函数传参以及数组类型的推导nullptr关键字:nullptr是一种特殊类型的字面值,它可以被转换成任意其它的指针类型;而NULL一般被宏定义为0,在遇到重载时可能会出现问题。智能指针:C++11新增了std::shared_ptr...
2019-07-29 22:35:30 199
原创 《基础知识——编译与底层》
一个C++源文件从文本到可执行文件经历的过程? 对于C++源文件,从文本到可执行文件一般需要四个过程:1、预处理阶段:对源代码文件中文件包含关系(头文件)、预编译语句(宏定义)进行分析和替换,生成预编译文件。2、编译阶段:将经过预处理后的预编译文件转换成特定汇编代码,生成汇编文件3、汇编阶段:将编译阶段生成的汇编文件转化成机器码,生成可重定位目标文件4、链接阶段:将多个目...
2019-07-22 11:23:37 241
原创 《基础知识——面向对象与泛型编程》
什么是右值引用,跟左值又有什么区别? 右值引用是C++11中引入的新特性 , 它实现了转移语义和精确传递。它的主要目的有两个方面:1. 消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。2. 能够更简洁明确地定义泛型函数。左值和右值的概念:左值:能对表达式取地址、或具名对象/变量。一般指表达式结束后依然存在的持久对象。右值:不能对表达式取地址,或匿名对象...
2019-07-22 10:33:40 183
原创 《基础知识——类和数据抽象》
C++中类成员的访问权限 详见《C++类中的访问权限问题》C++通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。在类的内部(定义类的代码内部),无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。在类的...
2019-07-22 10:25:41 130
原创 《基础知识——容器和算法》
map和set有什么区别,分别又是怎么实现的? map和set都是C++的关联容器,其底层实现都是红黑树(RB-Tree)。由于 map 和set所开放的各种操作接口,RB-tree 也都提供了,所以几乎所有的 map 和set的操作行为,都只是转调 RB-tree 的操作行为。map和set区别在于:(1)map中的元素是key-value(关键字—值)对:关键字起到索引的作用...
2019-07-19 21:24:38 181
原创 《基础知识——细节知识》
C语言是怎么进行函数调用的? 每一个函数调用都会分配函数栈,在栈内进行函数执行过程。调用前,先把返回地址压栈,然后把当前函数的esp指针压栈。 C语言参数压栈顺序? 从右到左。 C++如何处理返回值? 生成一个临时变量,把它的引用作为函数参数传入函数内。 C++中拷贝赋值函数的形参能否进行值传递? 不能。如果是这种情况下,调用拷贝构造函数的时候,...
2019-07-19 17:33:15 146
原创 《基础知识——const》
const修饰成员函数的目的是什么? 类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变。(在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函数不能加 const。所以 const 关键字对成员函数的行为作了更加明确的限定:有 const 修饰的成员函数(指 const...
2019-07-19 10:23:24 509
原创 《基础知识——代码相关》
有段代码写成了下边这样,如果在只修改一个字符的前提下,使代码输出20个hello? for(int i = 0; i < 20; i--) cout << "hello" << endl;【答案】:for(int i = 0; i + 20; i--) cout << "hello" << endl;...
2019-07-19 09:57:46 2048
原创 《基础知识——main函数执行前先运行》
【原文链接】 在gcc中: 可以使用attribute关键字,声明constructor和destructor,代码如下:#include <stdio.h> __attribute((constructor)) void before_main() { printf("%s/n",__FUNCTION__); } __...
2019-07-19 09:37:50 2011
原创 《基础知识——++i 和 i++的区别与实现》
++i 和 i++的区别 ++i先自增1,再返回,i++先返回i,再自增1 ++i 和 i++的实现 【++i 的实现】:int& int::operator++(){*this +=1;return *this;}【i++ 的实现】:const int int::operator(int){int oldValue = *this;...
2019-07-18 23:37:38 171
原创 《基础知识——strcpy和strlen》
strlen() 和 strcpy()函数的区别 这两个一个是返回一个C风格字符串的长度,一个是对一个C风格字符串的拷贝,两个本来功能上是不同的,此外,他们还有一些细小的区别:strlen("hello")返回的结果是5,是不包含字符串结尾处的‘\0’,但是strcpy(str1,str2),会拷贝str2中的‘\0’。 【补充】(C字符串——库函数系列(strlen、strca...
2019-07-18 17:17:57 1002
原创 《基础知识——方法重载和方法覆盖》
方法重载 【重载】:在一个类中用相同的名字创建多个方法(每个方法的参数表不同)。【作用】:解决了同一个类中,相同的功能方法名不同的问题,既然是相同的功能,那么方法的名字就应该相同。【方法重载原则】:(两同一不同)同类中,方法名相同,方法参数列表不同(参数类型、参数个数、参数顺序) 方法覆盖 【覆盖】:在一个类中创建的方法与父类中方法的名字、 返回类型和参数表相...
2019-07-18 17:06:00 211
原创 《基础知识——fork( )函数》
fork( )函数: fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 返回值: 1)在父进程中,fork返回新创建子进程的进程ID;2)在子进程中,fork返回0;3)如果出现错误,fork返回一个负值;【错误原因】:1)当前的进程数已经达到了系...
2019-07-18 16:58:23 106
原创 《基础知识——析构函数、虚函数》
为什么析构函数必须是虚函数? 防止内存泄露。【解释】:构造函数:进行初始化成员变量的函数。析构函数:在对象生命周期结束的时候,完成资源的回收和清理。虚析构函数:只有当一个类被定义为基类的时候,才会把析构函数写成虚析构函数。定义一个基类的指针p,在delete p时,如果基类的析构函数是虚函数,这时只会看p所赋值的对象,如果p赋值的对象是派生类的对象,就会调用派生类的析构函...
2019-07-18 10:38:49 526
原创 《基础知识——数组与指针、野指针》
数组与指针的区别与联系 数组 指针 概念 保存数据 保存数据的地址 赋值 只能一个一个元素的赋值或拷贝 同类型指针变量可以相互赋值 存储方式 在内存中是连续存放 数组的存储空间,不是在静态区就是在栈上 可以指向任意类型的数据 指针...
2019-07-16 20:51:00 213
原创 《基础知识——判断是2的倍数&1的个数》
判断是2的倍数 即判断该数二进制末位是不是0:a % 2 == 0 或者a & 0x0001 == 0。 1的个数 十进制中1的个数:直接逐位除十取余判断 二进制中1的个数(剑指Offer-15) 右移与1判断(如果是负数,一直右移会陷入死循环) 为避免死循环,左移1与原数相与循环判断(循环次数等于整数二进制的位数) n = (n - 1)...
2019-07-16 12:41:04 790
原创 《基础知识——c++中四个智能指针》
智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。C++ 11中最常用的智能指针类型为shared_ptr,它采用引用计数的方法,记录当前内存资源被多少个智能指针引用。该引用计数的内存在堆上分配。当新增一个时引用计数加1,当过期时引用计数减一。只有引用计数为0时,智能指针才会自动释放引用的内存资源。对s...
2019-07-16 12:11:49 254
原创 《基础知识——判断点P在△ABC内》
需要注意的是,这里假定点和三角形位于同一个平面内。 内角和法 连接点P和三角形的三个顶点得到三条线段PA,PB和PC,求出这三条线段与三角形各边的夹角,如果所有夹角之和为180度,那么点P在三角形内,否则不在,此法直观,但效率低下。 同向法 假设点P位于三角形内,会有这样一个规律,当我们沿着ABCA的方向在三条边上行走时,你会发现点P始终位于边AB,BC和CA的右侧。我们...
2019-07-16 11:07:50 682
原创 《基础知识——c++中指针和引用的区别》
c++中指针和引用的区别 ★ 相同点:都是地址的概念; 指针指向一块内存,它的内容是所指内存的地址; 引用是某块内存的别名。★ 区别: 1. 指针是一个实体,而引用仅是个别名; 2. 引用使用时无需解引用(*),指针需要解引用; 3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 引用“从一而终” ^_^...
2019-07-16 10:05:44 116
原创 《基础知识——c++中四种cast转换》
https://blog.csdn.net/qq_22080999/article/details/812799541. const_cast<T> (expression) //移除常量性const_cast 一般用于强制消除对象的常量性。它是唯一能做到这一点的 C++ 风格的强制转型。2. static_cast<T> (express...
2019-07-16 09:39:51 296
原创 《基础知识——C和C++的主要区别》
C和C++的主要区别 设计思想上:C++是面向对象的语言,而C是面向过程的结构化编程语言语法上:C++具有封装、继承和多态三种特性C++相比C,增加多许多类型安全的功能,比如强制类型转换、C++支持范式编程,比如模板类、函数模板等知乎复制:你问区别,那一定有区别,语言在设计走向上总是朝着更加优化和简便的方向去开发的,这是最原始的动机,也是根本区别,只不过相应的...
2019-07-15 22:57:45 493
原创 《基础知识——static关键字的作用》
说一下static关键字的作用C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。面向过程(1 静态全局变量 2 静态局部变量 3 静态函数)静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例...
2019-07-15 21:05:47 146
转载 拷贝构造函数调用的时机
链接:https://www.nowcoder.com/questionTerminal/a0f69e79a60d45f2b441c7e92f8f6ad3来源:牛客网拷贝构造函数调用的时机:1、当用类的一个对象初始化该类的另一个对象时2、 如果函数的形参是类的对象,调用函数时,进行形参和实参结合时.3、如果函数的返回值是类的对象,函数执行完成返回调用者时.4、需要产生...
2019-06-10 20:42:04 217
转载 java是一种类型安全的语言,C++不是.
什么叫类型安全的语言?本人很浅陋的认识是:就C++而言,我们可以把0作为false,非零作为true。一个函数就算是bool类型的,我们还是可以返回int类型,并且自动把0转化成false,非零转化成true。相比之下java不能把int类型转化成bool类型。所以java是一种类型安全的语言,而C++并不是。---------------------作者:chengonghao...
2019-06-10 17:38:45 920
原创 《基础知识——内存四区》
内存四区模型 图1、内存四区模型【流程说明】:1、操作系统把物理硬盘代码load到内存2、操作系统把c代码分成四个区3、操作系统找到main函数入口执行 1、内存四区: 一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。...
2019-06-10 16:57:51 554
转载 不同类型变量对应的字节数
https://www.nowcoder.com/test/question/done?tid=24355113&qid=25239#summary64位操作系统,不同类型变量对应的字节数为:(红色的表示与32位系统不同之处)char :1个字节 char*(即指针变量): 8个字节 short int : 2个字节 int...
2019-06-10 16:53:37 3856
转载 函数传参的形式:传值、传指针、传引用
链接:https://www.nowcoder.com/questionTerminal/ede977fad63e497fb02cba1febf92652来源:牛客网函数传参的形式,它包括三种:传值、传指针、传引用;其中传值不会改变变量的值,传指针和传引用会改变变量的值。传值:函数的参数会产生临时空间,函数结束就会释放空间,因此不会改变主函数中变量的值;传指针:即传递的是...
2019-06-10 16:49:53 222
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人