C/C++
文章平均质量分 75
朱又炖粉条
这个作者很懒,什么都没留下…
展开
-
const的修饰规则
const在*的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);const在*的右边,则指针的指向不可变。简记为“左定值,右定向”。(1)指针可以改变,指向的值不能改变 int a=10; const int *p1=&a; //例如:允许 p1+=1 ,不允许 *p1=20 int const *p2=&a; ...原创 2018-07-21 00:02:58 · 4439 阅读 · 2 评论 -
【C/C++】与const有关的指针类型赋值
一级指针相互赋值int a=10;int *p1=&a;const int *p2=&a;int * const p3=&a;int *q1=&a;const int *q2=&a;int *const q3=&a;p1=q1; 可以。int * -> int *p1=q2; 不可以。const int *p1 -...原创 2018-07-26 19:50:30 · 837 阅读 · 0 评论 -
【C/C++】拷贝构造函数 赋值运算符的重载
1.拷贝构造函数1.1拷贝构造函数基本形式就类对象而言,相同类型的类对象是通过拷贝构造函数来在对象初始化期间完成整个复制过程的。拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一个引用变量,该参数是const类型,不可变的。例如:类T的拷贝构造函数的形式为T(const T& t)。当用一个已初始化过了的自定义类类型对象去初始化另...原创 2018-08-03 18:49:12 · 1356 阅读 · 2 评论 -
数据在内存中的大小端模式存储
大端模式:数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。小端模式:数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位...原创 2018-07-31 16:19:51 · 1571 阅读 · 0 评论 -
【C/C++】基本数据类型的隐式类型转换
1.用一种类型的表达式赋值给另一种类型的对象,目标转换类型是被赋值对象的类型。2.把一个表达式传给一个函数调用,表达式类型与形式参数类型不同,目标转换类型是形参类型;从一个函数返回一个表达式,表达式的类型与返回类型不同,目标转换类型是函数的返回类型。总之,一切以函数定义为准。3.在混合类型的算术表达式中,目标转换类型为最宽的数据类型。(1)如果一个操作数的类型是 long do...原创 2018-08-01 12:38:49 · 752 阅读 · 0 评论 -
链表的翻转(迭代法 递归法)
链表翻转常见的方法分为递归和迭代两种。我们知道迭代是从前往后依次处理,直到循环到链尾;而递归恰恰相反,首先一直迭代到链尾也就是递归基判断的准则,然后再逐层返回处理到开头。总结来说,链表翻转操作的顺序对于迭代来说是从链头往链尾,而对于递归是从链尾往链头。下面我会用详细的图文来剖析其中实现的细节。1、迭代方式 迭代的方式是从链头开始处理,如下图给定一个存放5个数的链表。 首先对于...原创 2018-08-02 20:29:00 · 754 阅读 · 0 评论 -
【C/C++】成员变量的初始化顺序
变量的初始化顺序:① 基类的静态变量或全局变量②派生类的静态变量或全局变量③基类的成员变量④派生类的成员变量注意:①成员变量在使用初始化列表初始化时,与构造函数中初始化成员列表的顺序无关,只与定义成员变量的顺序有关。②如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。③类中const成员常量必须在构造函数初始化列表中初始化。...原创 2018-09-08 11:22:33 · 3148 阅读 · 0 评论 -
【C/C++】变量的内存分配
一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(stack)—— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。2、堆区(heap)—— 在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局...原创 2018-10-12 16:16:42 · 404 阅读 · 0 评论 -
【C/C++】运算符优先级记忆
运算符优先级顺口溜:淡云一笔,鞍落三服。淡:单目运算符;云:算术运算符;一:移位运算符;笔:比较运算符;鞍:按位运算符;落:逻辑运算符;三:三目运算符;服:赋值运算符。单目运算符 >算术运算符 >移位 >比较 >按位 >逻辑 >三目运算符 >赋值运算符例:单目运算符如++和--,算术运算符如+,<和!=是比较运...原创 2018-10-21 16:25:31 · 1052 阅读 · 0 评论 -
【C/C++】顺序容器list和vector
顺序容器是拥有单一类型元素组成的一个有序集合。主要的顺序容器有vector和list。其实还有deque(双端队列)1.vector数据结构使用头文件:#include <vector>vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。因此能高效的进行随机存取,时间复杂度为o(1);但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷...原创 2018-10-21 17:25:15 · 495 阅读 · 0 评论 -
【C/C++】sizeof和strlen的一些比较
1.sizeof求的是数据类型所占空间的大小(不受其中存储内容的影响),而strlen是求字符串的长度。2.sizeof的参数可以是变量也可以是数据类型,strlen的参数只能是以"\0"结尾的字符串。3.编译器在编译的时候就计算出了sizeof的大小,而strlen只有在程序运行期间才能计算出字符串长度。4.在子函数中,ziseof 会把从主函数中传进来的字符数组当作是指针来处理。...原创 2018-10-23 15:07:18 · 238 阅读 · 0 评论 -
【C/C++】inline函数和static函数和宏定义的比较
inline内联函数1.内联函数的定义:内联函数是指用inline关键字修饰的函数。如果内联函数在类体内定义,不用inline关键字声明,默认为内联函数。2.内联函数在函数调用点展开,没有栈帧的开辟和回退。内联函数函数是在编译时直接插入函数代码的,会增加代码大小,但是可以提高运行速度。3.内联函数不生成符号,仅可以在本文件可见。4.如果想在其他文件使用该内联函数,可以在函数定义处加...原创 2018-10-23 21:11:12 · 610 阅读 · 0 评论 -
【C/C++】友元函数和友元类
友元(frend)机制允许一个类将对其非公有成员(包括私有成员和保护成员)的访问权授予指定的函数或者类,友元的声明以friend开始,它只能出现在类定义的内部,友元声明可以出现在类中的任何地方。1.友元函数友元函数是指某些虽然不是类成员函数却能够访问类的所有成员的函数。类授予它的友元特别的访问权,这样该友元函数就能访问到类中的所有成员。友元函数可以在类内实现也可以在类外实现。友员函数不...原创 2018-10-24 21:16:35 · 380 阅读 · 0 评论 -
【C/C++】符号常量 常变量
1.常量在程序运行过程中,其值不能被改变的量叫做常量。常用的常量有如下几类:整型常量实型常量字符常量 普通字符 转义字符 如:\\表示一个反斜线;\n表示换行,将当前位置移到下一行的开头;\r表示回车,将当前位置移到本行的开头。字符串常量符号常量符号常量不占内存,只是一个临时符号,预编译结束后这个符号就不存在了。用标识符代表一个常量,...原创 2018-07-23 17:10:09 · 2631 阅读 · 0 评论 -
【C/C++】字符串类型
C++提供了两种字符串的表示:C 风格的字符串和标准 C++引入的 string 类类型。1. C 风格字符串C 风格的字符串起源于 C 语言 并在 C++中继续得到支持。字符串被存储在一个字符数组中 一般通过一个 char*类型的指针来操纵它 。标准 C 库为操纵 C 风格的字符串提供了一组函数,例如:int strlen( const char* ); // 返回字符串的长度...原创 2018-07-23 16:12:49 · 4147 阅读 · 0 评论 -
【C】C语言内存字节对齐
原博地址:https://blog.csdn.net/andy572633/article/details/7213465首先说说为什么要对齐。为了提高效率,计算机从内存中取数据是按照一个固定长度的。以32位机为例,它每次取32个位,也就是4个字节(每字节8个位,计算机基础知识,别说不知道)。字节对齐有什么好处?以int型数据为例,如果它在内存中存放的位置按4字节对齐,也就是说1个int的数据全部...转载 2018-05-08 22:42:54 · 285 阅读 · 2 评论 -
【C】malloc(0)问题
实际上malloc(0)这个语法是对的,也确实分配了内存,但内存空间是0,就是说返回指针是不能用的。malloc(0)的返回值可能是NULL也可能不是NULL,和实参为一个正整数时没什么区别。如果返回值不为NULL,也应该用free()函数释放。malloc(0)唯一不同的地方就是,就算你申请内存成功,即malloc(0)返回值不为NULL,你也没法使用这块内存。《C语言参考手册》上说“如果请求的...原创 2018-05-12 14:30:15 · 1285 阅读 · 1 评论 -
【C】define宏展开 & typedef类型重命名
1.define define宏展开是在预编译过程进行替换。 #include<stdio.h> #include<typeinfo> using namespace std; //C++ #define int int * //注意不能误加分号 void main() { int a,b; //预编译:int *a,b; 【*和变量...原创 2018-05-12 16:22:39 · 1035 阅读 · 1 评论 -
【C】malloc动态分配内存和free释放
先看一个例子#include<stdio.h>int max=10; //data区,不产生具体的可执行代码。void main(){ //局部变量都在栈区。 栈内存自动分配,释放。堆需要手动malloc,free int a=10; //mov dword ptr[a], 0x0a; 在函数体内,产生具体的可执行代码。}...原创 2018-05-12 16:34:17 · 20392 阅读 · 2 评论 -
【C/C++】通过无类型指针实现泛型拷贝(内存拷贝)
无类型指针的缺陷是无法对类型进行解释。(不能计算无类型的大小)如,定义一个无类型指针:void *p不能进行++p或者*p的操作,因为系统没有此地址指向对象大小的信息。 无内存重叠(从低地址开始复制)头文件string.h中定义的memcpy()函数可以实现泛型的拷贝。函数memcpy()原型:void* memcpy(void *dest,void *src,unsi...原创 2018-05-19 20:50:17 · 634 阅读 · 0 评论 -
函数指针实现无类型打印
#include<stdio.h>void MyInt(void const *ar,int size){ size/=4; //int 一次打印4字节 int const *p=(int const *)ar; for(int i=0;i<size;++i) { printf("%d ",p[i]); } printf("\n");}void MyF...原创 2018-05-19 21:39:56 · 176 阅读 · 0 评论 -
exit()和_exit()的区别
exit函数:定义在C标准库stdlib.h中;当我们调用exit(0)时,表示正常退出当前进程,当我们调用eixt(1)时表示非正常退出当前进程。 _exit函数:定义在unistd.h中;直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;exit() 函数则在这些基础上作了一些包装,在执行退出之前加了若干道工序。exit()函数在调用exit系统调用之前要检查文件的打开...原创 2018-05-20 11:36:48 · 3106 阅读 · 0 评论 -
【C】sizeof(空结构体/空类)的大小
sizeof(空类/空结构体) = 1;#include <iostream> using namespace std; // 空类 class ClassA { }; // 继承空类的空类 class ClassB : public ClassA { }; // 空结构体 struct StructC { ...原创 2018-06-17 11:56:54 · 1107 阅读 · 1 评论 -
【C】动态申请二维数组
int ** Get2Array(int n, int m){ if (n < 0 || m < 0) return NULL; int **s = (int **)malloc(sizeof(int *)*n); //【开辟行空间】 if (s == NULL) { exit(1); } for (int i = 0; i < n; ++i) {...原创 2018-06-10 10:34:43 · 236 阅读 · 1 评论 -
哈希表
1.哈希表哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。hash就是找到一种数据内容和数据存放地址之间的映射关系。当使用哈希表hashtable(key,value) 进行查询的时候,就是使用哈希函数将关键码key...原创 2018-06-17 21:00:53 · 147 阅读 · 0 评论 -
【C/C++】C++98基础上的C++11新特性
一、新语法1.自动类型推导autoauto的自动推导,用于从初始化表达式中推断出变量的数据类型。//C++98int a = 10;string s = "abc";float b = 10.0;vector<int> c;vector<vector<int> > d;map<int, string> m;m[1] = "...原创 2018-11-04 20:22:09 · 1543 阅读 · 0 评论