吐槽一下: 指针常量与常量指针的翻译就好比机器学习中Regularization翻译成正则化一样,讲真,正则化这个说法确实要比规则化显得高端些,但是到了理解的时候,还是要按照规则化理解。...指针常量与常量指针这个概念是一样的,英文里没有pointer const这个词,只有pointer to const和const pointer这两个词。.../合法 p = &b;//不合法 以上就是所谓的指针常量与常量指针所包含的概念,在这里标个号: 1,2暂时称为第一类,3暂时称为第二类,那么第一类和第二类到底哪个叫做指针常量,那个叫做常量指针呢?...说实话我都不知道指针常量与常量指针的叫法是不是够官方,我只能说概念非常混淆,而且其实它的两个名字并不重要,关键的是声明方式与作用的区别。...到目前为止我还没有找到更权威的说法,维基百科找不到这两个词,所以我们干脆不要去理会第一类与第二类到底该叫做什么名字,因为他们的声明方式与作用是决定清晰的就足够了。
C++入门 指针空值 指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现 不可预料的错误,比如未初始化的指针。...不论采取何 种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦,比如: #include using namespace std; void func(int ) { cout...程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,因此与程序的初衷相悖 在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量...注意: 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的 在C++11中,sizeof(nullptr) 与 sizeof((void)0)所占的字节数相同...为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr
如果没有找到,s1 将是空的 完整代码如下: class Solution { public: vector twoSum(vector& price, int target...解决方法是在找到一个符合条件的组合后,跳过所有相同的元素 遍历策略:外层循环遍历数组,内层使用双指针从两端向中间查找两个其他元素,以保证三个数的和为零 跳过重复元素: 在外层循环中,如果当前的数字与前一个数字相同...双指针主要应用在有序数组或链表的问题中,以及一些可以通过前后关系来优化问题的场景: 有序数组的对撞指针: 两数之和:在有序数组中找到两个数,使它们的和为特定的目标值 三数之和/四数之和:与两数之和类似...左右指针: 二分查找:在有序数组中查找元素,使用左右指针限定查找范围 双指针方法的关键在于,指针的移动可以依据问题的规律来减少不必要的比较或计算,从而提高算法效率。...当然,双指针的使用需要充分理解问题的性质,并巧妙设计指针的移动策略。在很多问题中,双指针技术都能将时间复杂度从 O(n2) 优化到 O(n),超级好用 本节内容到此结束!!感谢大家阅读!!
这样一来,所有的零都会被替换到交换过非零元素位置的后面 2.复写零 题目链接:1089.复写零 题目描述: 遇到0写两遍,不能越界 算法原理 双指针算法,先根据异地操作,然后优化成双指针下的就地操作...bitsum(fast)); } return slow==1; } 最后判断相遇位置是否为1即可 4.盛水最多的容器 题目链接:11.盛水最多的容器 题目描述: 要解决这个问题,我们使用双指针的方法...一开始,我们将一个指针放在数组的最左边(即 left 指向索引 0),另一个指针放在数组的最右边(即 right 指向索引 n-1)。...然后,我们计算由这两个指针指向的线和 x 轴构成的长方形的面积,并尝试找出能够获得更大面积的线对 具体地说,我们将指针向对方移动,并在每一步更新最大面积。...由于容器的宽度随着指针的移动而减小,所以为了有可能增加面积,我们只移动指向较短线的指针(因为如果移动指向较长线的指针,面积只会减小或不变)。
"年龄是:" age << endl; } }; void test() { Person* p = NULL; //p->showAge();会报错,因为空指针访问成员属性不可行
函数指针:指向函数的指针,首先它是指针变量(同指向一个整形变量、字符、数组一样),其次它指向一个函数(地址)。...声明:函数类型 (* 指针变量名)(形参列表) 函数类型,指明函数的返回类型,由于()优先级高于*,所以指针变量名外的括号不能少,后面形参列表表示指针变量指向的函数所带的参数列表。...上面相当于用函数指针p,代替了max,为什么能这样? 事实上,每一个函数都有一个入口地址,这个地址相当于一个指针,而函数名表示的就是该函数的首地址(入口地址)。...:首先它是一个函数,其次它返回的类型是一个指针。...声明:类型标识符 *函数名(参数列表) 类型标识符,用于限定返回的类型(是指向型、字符型或者数组) 参考: 函数指针
专栏放在【C++知识总结】,会持续更新,期待支持 ---- 引用 引用的概念 在C++中,引用的本质其实就是给一个已经存在的变量”起别名“。也就是说,引用与它所引用的对象共用一块空间。...&是一个很熟悉的符号,与指针有关,用在变量前面就是取地址符号,用在类型后面则为引用符号,那么指针与引用之间是否有着什么关系呢?...int a=0; int* p=&a;//&:取地址符 int& b=a;//&:引用 指针与引用的相同点 实际上,引用与指针,两者之间在底层实现上其实是一样的,我们可以来进行验证 当然,两者之间也存在着很大的区别...指针与引用的不同点 首先就是在语法概念上的区别, 引用只是同一个实体的不同名称, 不会单独开辟空间,但是指针会在内存开辟一块4/8byte大小的空间。...看法: 因此对于指针与引用,我们只能是说引用相较于指针来说,更加容易理解使用,并且也不会存在空引用的问题,但是在一些场景下,引用自身的特点(不能改变指向)也存在着使用限制,此时就得用指针来实现
不幸的是,这是一种非常危险的想法,并不完全正确,前面我们将数组和指针等价起来是为了方便大家理解(在大多数情况下数组名确实可以当做指针使用),不至于被指针难倒,这里就请大家忘记这种观念,因为它可能将会颠覆你之前的认知...数组和指针不等价的一个典型案例就是求数组的长度,这个时候只能使用数组名,不能使用数组指针,这里不妨再来演示一下: 运行结果: 数组是一系列数据的集合,没有开始和结束标志,p 仅仅是一个指向 int...类型的指针,编译器不知道它指向的是一个整数还是一堆整数,对 p 使用 sizeof 求得的是指针变量本身的长度。...再看指针与数组 编程语言的目的是为了将计算机指令(机器语言)抽象成人类能够理解的自然语言,让程序员能够更加容易地管理和操作各种计算机资源,这些计算机资源最终表现为编程语言中的各种符号和语法规则。...与普通变量名相比,数组名既有一般性也有特殊性:一般性表现在数组名也用来指代特定的内存块,也有类型和长度;特殊性表现在数组名有时候会转换为一个指针,而不是它所指代的数据本身的值。 老九学堂出品
双指针 今天来通过5个力扣题来分享下数据结构与算法中的一个解题方法——双指针 ? 26....当快指针指向的数值与慢指针指向的相等的时候,这个时候就意着,数据开始重复,而我们慢指针确保的是不重复数据,那么,慢指针不动,让快指针继续向前走 当快指针指向的数值与慢指针指向的不等的时候,这个时候就意着慢指针需要向前移动...当我们快指针指向的不是要删除的数据的时候,将快指针指向的数值赋值给慢指针,然后慢指针向前移动一位,快指针前移 ?...Math.max(result, right - left +1); right++; } return result; } } 总结 双指针...如果要细分的话,双指针有左右指针,快慢指针,滑动窗口三种类型,一般时间复杂度为O(n),空间复杂度为O(1),这就是双指针的精妙之处
https://blog.csdn.net/sinat_35512245/article/details/53871767 指针与引用是C++中两个很重要的概念,它们功能看过去很相似,就是都是间接引用某个对象...,那么我们应该在什么时候使用指针,什么时候使用引用呢,下面请允许我慢慢道来: ---- 1.永远不要使用一个指向空值的引用。...一个引用必须始终指向某个对象,所以当你确定使用一个变量指向某个对象时,但是这个对象在某些时间可能指向控制,这时候你就必须把变量声明为指针类型,而不是引用!...char *str=0; //设置指针为空值 char &s=*str; //让引用指向空值 你应该避免出现上面的错误! 2.因为引用肯定要指向一个对象,所以,在C语言里引用必须被初始化。...double *pd) { if (pd) { // 检 查 是 否 为 NULL cout << *pd; } } 4.指 针 与
通过实验进一步掌握指针的概念,会定义和使用指针变量。 能正确使用数组的指针和指向数组的指针变量。 能正确使用字符串的指针和指向字符串的指针变量。 能正确使用引用型变量。
因此指针是表示信息在内存中存储地址的一类特殊变量,指针和其所指向的变量就像是一个硬币的两面。指针一直都是学习C语言的难点,在C++中又多了一个引用的概念。...为了更有助于理解,我们绘制了下图: 因此从本质上看,指针与普通的变量并没有什么太大的区别,只是指针变量可以通过解引用的方式找到指针所对应的地址中存放的数值。...在C++中,数组名被解释为数组地址,即数组第一个元素的地址。...而 new 在使用时只需要给定内存的长度与内存中数据的类型,编译器会自动计算所需要的字节数。 4、引用的声明与本质 C++中新增了引用作为已定义的变量的别名。...(int* a, int* b){ int temp; temp = *a; *a = *b; *b = temp; } swap(&a, &b); //调用格式 综上发现,引用其实就是变量的另一个名称
C++随记(五)---const 与 指针 const 限定符它把一个对象转换成一个常量,const与define。...const和指针一起用时会有些有趣,我们下面一一分析一下各种情况: 1、指针指向一个常量对象。...也就是不管你变量和指针自己玩的多欢,就是不许你通过指针去修改变量。...这里的意思是,声明了一个 指向int 类型的 const 指针 pt2,pt2现在自己都不能修改自己的值了,因为 指针本身被声明为了常量。...所以情况1中,我的用于是指向const对象的指针,强调的是对象是const的,而情况2中,我们就应该说是const指针,因为指针本身是const 的。
指针变量作为参数传递给函数的时候,编译器会将这个指针变量Copy一份,也就说在函数内部使用的这个参数变量,是另外一个指针变量。...不过在fun()内部的这个指针变量所指向的内存位置并没有变化,在函数内部更改该内存位置的数值的话,fun()外部的指针变量a所对应的数值也会被改变。...从程序的输出可以看出,fun()返回的指针变量也是copy了一份到外部的指针变量b,只不过指针变量b指向的内存空间还是原来的内存空间。...总结: 通过上面的两个程序,以及其输出结果可以看出,指针变量在作为参数传递给函数的时候,与正常的非指针变量的传递方式并没有区别,都是copy一份新的变量。...只不过不同的指针变量都可以指向同一块内存空间,如此一来只要指针变量指向的内存空间里面的数值更改了,那么传入参数的指针变量所对应的数值也会跟着改变。 同样的道理,函数的返回值是指针变量的也是如此。
C++什么是指针 在C++代码中一般是通过变量名来对内存单元进行存取操作的,程序经过编译以后已经将变量名转换为变量的地址,对变量值的存取都是通过地址进行的。...在C++中,还可以采用另一种称为间接存取的方式,可以在程序中定义这样一种特殊的变量,专门用来存放地址,由于通过地址能找到所需的变量单元,因此可以说,地址指向该变量单元。...因此将地址形象化地称为指针,一个变量的地址称为该变量的指针;如果有一个变量是专门用来存放另一变量地址的,则它称为指针变量;指针变量的值是地址。...C++指针变量 指针变量是一种特殊的变量,用它来指向另一个变量。为了表示指针变量和它所指向的变量之间的联系,在C++中用: * 表示指向。 经典案例:C++实现用string复制。...C++变量与指针 | 用string复制 更多案例可以go公众号:C语言入门到精通
底层汇编语言里 引用与指针是一样的 都是指针 引用与指针的不同点 引用概念上定义一个变量的别名,指针存储一个变量地址。...在C++中,`auto`关键字的传统用法与C语言相同,但在C++11标准中,`auto`被赋予了新的含义,用作类型自动推导。这意味着在声明变量时,编译器会自动根据初始化表达式的类型来确定变量的类型。...指针空值nullptr(C++11) C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现 不可预料的错误,比如未初始化的指针。...不论采取何 种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦,比如: 程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,因此与程序的 初衷相悖...在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。 3. 为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。
sizeof(int)); // 定义整数内存池 int *ptr[10] = { 0 }; // 定义指针列表...for (int x = 0; x < 10; x++) { ptr[x] = static_cast(pool.malloc()); // 开辟空间并转为指针 if...&ptr[x] << " 数值: " << *ptr[x] << endl; } getchar(); return 0; } objectPool 内存池: 该内存池支持对结构体,对象的分配与初始化...smart_ptr.hpp> using namespace std; using namespace boost; int main(int argc, char const *argv[]) { // 基本的定义与赋值...boost::shared_ptr int_ptr(new int); *int_ptr = 1024; cout << "指针: " << &int_ptr << " 数值: " <
樱雨楼 | 作者 豌豆花下猫 | 编辑 0 引言 指针(Pointer)是 C、C++ 以及 Java、Go 等语言的一个非常核心且重要的概念,而引用(Reference)是在指针的基础上构建出的一个同样重要的概念...本文基于 C++ 与 Python,讨论了 Python 中与指针及引用相关的一些行为。 ? 1 什么是指针?为什么需要指针?...由此可见,与指针相关的各操作对于编程而言都是必须的或十分重要的。...2 C++中的引用 在 C++ 中,引用具有与指针相似的性质,但更加隐形与严格。C++ 的引用分为以下两种: 2.1 左值引用 左值引用于其初始化阶段绑定到左值,且不存在重新绑定。...= &__tmpNum; // 或者: shared_ptr sampleNum(new int(0)); 3.2.2 __setitems__操作将隐式解指针 Python与指针的另一个重要联系在于
本文依然是对比 C++ 与 Python,来探讨编程语言中极其重要的概念。祝大家读有所获,学有所成!...本文基于 C++ 与 Python,讨论了 Python 中与指针及引用相关的一些行为。1 什么是指针?为什么需要指针?...,与指针相关的各操作对于编程而言都是必须的或十分重要的。...2 C++中的引用在 C++ 中,引用具有与指针相似的性质,但更加隐形与严格。C++ 的引用分为以下两种:2.1 左值引用左值引用于其初始化阶段绑定到左值,且不存在重新绑定。...__tmpNum; // 或者: shared_ptr sampleNum(new int(0)); 3.2.2 __setitems__操作将隐式解指针Python与指针的另一个重要联系在于
在 C++ 中,可以将一个指针指向某个数组,也可以使用一个指针数组指向一个数组。...6, 7, 8, 9}; std::cout << tell << std::endl; std::cout << &tell << std::endl; // 指向整个数组的指针与指向数组首地址的指针是相同的...short *o = tell; // 指针指向数组的首地址,移动一次为 2 个字节。...&tell是一个这样的指针,即指向包含10个元素的short数组(short (*) [10])。...如果省略括号,优先级规则将使得 p 先与[10]结合,导致 p 是一个short指针数组,它包含10个元素。
领取专属 10元无门槛券
手把手带您无忧上云