C++--类的实例化 用类类型在屋里内存中创建对象的过程,称为类实例化出对象类是对对象进行一种抽象描述,是一个模型一样的东西,限定了类有哪些成员变量,这些成员变量只是声明,没有分配空间,用类实例化出对象时,才会分配空间。一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间,存储类成员变量。举个例子:类实例化出对象就像现实中使用建筑设计图建造出房子,类就是设计图,设计图并不是实体化的建筑,只有当使用设计图修建出房子后,这个房子才能住人。类同理,它不能存储数据,实例化出的对象分配物理内存数据。
数据结构--栈和队列 栈是一种特殊的线性表,它只允许在固定的一段进行插入和删除元素操作。首先创建用于队列实现的两个结构体,分别是队列的数据域和指针域,以及分别指向队列的头和尾的指针。首先便是创建一个以数组为底层的栈(栈的形式与顺序表相似,因为它们都是以数组为底层逻辑的)。只允许在一端进行插入数据操作在另一端进行删除数据操作的特殊线性表,对列具有先入先出的特性。栈的实现可以使用数组也可以使用链表,相对而言数组更为合适。出栈:栈的删除操作叫做出战,删除数据也是从栈顶开始删除。压栈:栈的插入操作叫做压栈,插入的数据存放在栈顶。
C++入门级文章 1、定义命名空间:其使用方法就是namespace后面加上命名空间域的名字跟一个大括号即可,其内容可以是变量/函数/结构体等。2、其本质是开辟一个独立的空间域,独立于全局域和局部域之外,在定义的命名空间域内创建与全局变量相同名字的变量不会产生冲突。int a = 20;int a = 10;3、namespace只能定义在全局,同时它是可以嵌套定义的int a = 10;int a = 10;4、在多文件下定义的同名namespace会被认为是同一个空间域。
环形链表2--绝妙的运算 / // 也就是说phead2是从x开始走的,他们两个走的距离刚好越过了X即L = N * C 两者的相遇点就是环形链表的起点。// // phead1和phead2相交的位置到环状链表环的起点的位置为X。指针再次到达,则链表中存在环。对链表的地址进行判断,当两链表指向的地址相同时说明该链表为环形链表。接下来判断链表是否为空链表以及链表的首项指向的地址是否为空;
环形链表--极致的简便 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。这里为什么是使用的phead2来进行判断而不是使用的phead1来判断的呢?对链表的地址进行判断,当两链表指向的地址相同时说明该链表为环形链表。接下来判断链表是否为空链表以及链表的首项指向的地址是否为空;来表示链表尾连接到链表中的位置(索引从 0 开始)。如果链表中有某个节点,可以通过连续跟踪。仅仅是为了标识链表的实际情况。的问题说明该链表不是环形链表;的方式来解决环形链表问题。,判断链表中是否有环。给你一个链表的头节点。
力扣刷题:26. 删除有序数组中的重复项 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。根据题目要求首先第一点就是我们不能额外创建空间来完成这道题目。不创建空间怎么删除多余的元素,又如何保存应当存在的元素呢?给你一个 非严格递增排列的数组nums ,请你。然后返回 nums 中唯一元素的数。元素的相对顺序应该保持一致。
你真的了解回调函数吗?(文章最后放置源码) 简单来说就是通过函数指针调用的函数。复杂一些呢就是说将函数的指针(地址)作为参数传递给另外一个函数使用,当这个指针被用来调用其指向的函数的时候被调用的函数就是回调函数。
深入理解指针(7)函数指针变量及函数数组(文章最后放置本文所有原码) 其实对于当前代码量较少,类型也比较简单的状态确实没有什么用处,但是当后期学习的更多了就能明白这个的重要性了,比如一个很长的代码中,我们要将其中所有的int类型的数据改成double类型,此时我们只需要在上面进行更改即可,一次更改后面的所有的int类型的数据都会更改为double类型,就不需要再一个一个慢慢的改了!经过上面的测试可以看到函数也是有地址的,而且其地址就是函数名(当前是x86环境,这样地址值相对较短更容易分辨)。既然是指针变量,那么它指向的一定是地址,而且我们可以通过地址来调用函数的。
动态内存数组(malloc、calloc、realloc、free) 以上就是创建成功我们可以做的事,而当malloc函数创建失败时,它会返回NULL,而NULL指针的使用会导致野指针。此时我们创建的malloc函数存在两种可能,首先第一种是创建成功了,第二种就是创建失败了。的方式来申请空间的缺点就是一旦创建成功,则空间不能改变。让程序员⾃⼰可以申请和释放空间,就⽐较灵活了。这样就OK了,这就是malloc函数的完整用法。,顾名思义就是说在内存中非固定的申请数组。参数是你要创建的空间数,单位为字节。直接创建变量/通过创建数组。直接创建变量/通过创建数组。
深入理解指针(6)字符、数组指针变量以及二维数组传参本质 他们是连续存在的,而二维数组的首元素指向的就是第一行的地址,此时当我们将数组arr+1时,指针指向的内容就会跳过一个一维数组,来到第二个数组的地址。arr[5]指向数组每行有多少列,* 指针指向的是数组的首元素地址,二维数组的首元素就是第一行的地址。可以看到这里的ptr的实际指向时字符串的首元素地址,而不是我们所通常认为的指向a这个字符串。前面我们已经学习过指针数组,本质是数组,数组的内容是地址,那么数组指针变量是什么呢?同样的道理,在这里的一维数组中,ptr指向的就是数组的首元素地址而非整个数组。
十分钟学懂数据在内存中是如何存储的(整数和浮点数) 在计算机内存中只要是超过一个字节的存储内容就会存在存储的排序问题。大端字节序:将高位存储在低地址,低位存储在高地址的存储方法小端字节序:将低位存储在低地址,高位存储在高地址的存储方法这里的存储规则应当记住。
strcpy、strcat、memcpy、memmove函数的使用及模拟实现 是C语言中的一个标准库函数,用于复制字符串。它位于 头文件中,函数原型为:该函数的功能是从源字符串 中复制字符到目标字符串 ,直到遇到空字符('\0')为止,即复制包括空字符在内的一整个字符串。注意:2、模拟实现二、memcpy函数的使用及模拟实现1、使用 是C语言中用于复制内存区域的标准库函数,它位于 头文件中。其原型定义为: dest:指向目标内存区域的指针。 src:指向源内存区域的指针。 n:要复制的字节数。 函数将从 指向的内存区域复制 个
深入理解指针(5) parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数组中的元素。上述的代码模拟出⼆维数组的效果,实际上并⾮完全是⼆维数组,因为每⼀⾏并⾮是连续的。我们类⽐⼀下,整型数组,是存放整型的数组,字符数组是存放字符的数组。指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪⾥?指针数组中的每个元素都是地址 他们又都指向一块空间。指针数组的每个元素都是⽤来存放地址(指针)的。我们通过图形来观察一下他的循环过程。指针数组是指针还是数组?
深入理解指针(4) 这个代码搞明⽩后,我们再试⼀下,如果我们再分析⼀下,数组名arr是数组⾸元素的地址,可以赋值给p,其实数组名arr和p在这⾥是等价的。这⾥我们发现&arr[0]和&arr[0]+1相差4个字节,arr和arr+1 相差4个字节,是因为&arr[0] 和 arr 都是⾸元素的地址,+1就是跳过⼀个元素。同理arr[i] 应该等价于 *(arr+i),数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移量求出元素的地址,然后解引⽤来访问的。数组名如果是数组⾸元素的地址,那下⾯的代码怎么理解呢?