指针

C++新特性之智能指针(一)——shared_ptr

女生的网名这么多〃 提交于 2020-03-10 06:12:32
智能指针之shared_prt 为啥要有智能指针,因为要自己手动分配内存还要自己释放回收,太麻烦,万一忘记了还很容易造成内存泄漏。所以,类似与java内存托管的智能指针来了,C11很重要,使用频率也很高的一个特性。shared_ptr遵循共享资源,多个智能指针对象可以共享这一块资源,the wonderful world comes from sharing. 一、创建以及初始化 std::shared_ptr<int> p1; //创建一个int类型智能指针并且不赋值 std::shared_ptr<int> p2(new int (123));//创建一个int类型智能指针,同时new一个int的对象给它 std::shared_ptr<int> p3 = p1;//拷贝初始化,p3与p1指向相同的内容 std::shared_ptr<int> p4 = std::make_shared<int>();//采用make_shared初始化,在动态内存中创建一个对象给它 std::shared_ptr<int> p5 = std::make_shared<int>(456); //采用make_shared初始化,在动态内存中创建一个对象给它,并初始化为456 std::shared_ptr<int> p6; p6.reset(new int(789));/

void指针在内存中的形式

廉价感情. 提交于 2020-03-10 03:35:18
void指针(即void*)由于可以转化为任意数据类型的指针,因此在vs的内存查看器中,void*所指向的内容都是问号,例如"???" 因此如果要知道void指针的内容,需要将其转化为对应的数据类型才能再做判断,需注意 来源: CSDN 作者: qinuo_2010 链接: https://blog.csdn.net/qinuo_2010/article/details/104760556

Leecode container-with-most-water

依然范特西╮ 提交于 2020-03-10 00:19:53
题目描述 给定n个非负整数a1,a2,…,an,其中每个数字表示坐标(i, ai)处的一个点。以(i,ai)和(i,0)(i=1,2,3…n)为端点画出n条直线。你可以从中选择两条线与x轴一起构成一个容器,最大的容器能装多少水? 注意:你不能倾斜容器 分析 设置左右指针,容积是下标只差和两指针中最小的高度乘积。初始时,左右指针分别指向最小和最大的端点。计算初始的容积。 因为随着指针的移动,宽度肯定会变小,而影响容积的是最矮的一边,短板效应。所以如果移动高的一方指针,一方面宽度会变小,另一方面短板不会改变,所以容积只会变小。所以,移动短板的指针,可能会使容积变大,直到左右指针重合,这时会找到最大的容积。 java 代码 public class Solution { public int maxArea ( int [ ] height ) { if ( height == null || height . length < 2 ) { return 0 ; } int left = 0 ; int right = height . length - 1 ; int area = 0 ; while ( left < right ) { area = Math . max ( area , ( right - left ) * Math . min ( height [ left ]

c++内存分类

江枫思渺然 提交于 2020-03-09 17:02:18
1、 代码段:放置代码 2、 静态数据段:放置全局变量和 static的局部变量,字符串常量 3、 动态数据段:栈,放置局部作用域的变量,离开函数返回后就会被释放;堆,必须手动的分配和释放。 关于字符串常量的说明 1、 一个字符串常量在程序内只有一份,是在静态存储区的,所有指向该常量值的指针都指向这个地址,一直到该程序结束才会被释放。 2、 常量是不能被修改的,通过指向它的指针或数组修改值时,会造成内存错误。 代码说明 char *test() { char *pp = "abcd";//该返回指针是有效的,因为字符串常量即使在函数返回后也不会//被释放,会一直存在的 char pp[] = "abcd";//该返回指针是无效的,因为函数返回后,该临时数组就被释放//了,指向的内容就是非法的 //通过下面是可行的,但是要注意内存的释放 char *pp = new char[5]; strcpy(pp, "abcd"); static char pp[] = "abcd";//返回指针有效,变量存储在静态区,并且其值还可以修改 cout << pp << endl; return pp; } 与类相关的内存分配 类中占用内存的有以下几部分 1、 代码段,这个只有一份,所有对象都是共用的 2、 变量段,包括自己的和从基类继承来的变量,静态变量不占用对象的内存大小 3、 虚函数指针

指针和数组

我的未来我决定 提交于 2020-03-09 13:39:43
待到秋来九月八,我花开后百花杀 指针和数组的区别 数组名在不同情况下都是什么? 指针数组 指针和数组的区别 首先我们看一段代码,在编程中是否遇到过这样的情况? # include <stdio.h> int main ( ) { int a [ 10 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 } ; printf ( "%d\n" , a [ 1 ] ) ; printf ( "%d\n" , * ( a + 1 ) ) ; int * p = a ; printf ( "%d\n" , p [ 1 ] ) ; printf ( "%d\n" , * ( p + 1 ) ) ; return 0 ; } 我们可以看到使用数组名和使用指针的效果一样。 那是否就能说明数组和指针有某种关系,甚至是一样的呢? 实际上指针和数组毫无关系。 首先,数组是数组变量类型,指针式指针变量类型,从变量类型角度来说就不同。 数组名是没有单独开辟空间的,而指针开辟了自己的空间,这就是他们最大的不同。 数组传参时,会发生降维(降维成指向其内部元素类型的指针),既然能够降维成指针,则说明两者不同。 他们在使用上不过是有一定相似性罢了。 有了上面的经验,我们也就可以知道了: int arr [ 10 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 ,

leetcode python3 环形链表

醉酒当歌 提交于 2020-03-09 11:40:05
代码思路:利用快慢指针遍历链表,若存在环形链表,两指针必相遇,否则快指针会先遍历完成 class Solution : def hasCycle ( self , head : ListNode ) - > bool : show = fast = head while fast and fast . next : show = show . next fast = fast . next . next if show == fast : return True return False 来源: CSDN 作者: jkn7 链接: https://blog.csdn.net/m0_37656366/article/details/104745759

「转」浅谈多态机制的意义及实现

别等时光非礼了梦想. 提交于 2020-03-09 09:56:34
转载来自: https://hesey.wang/2010/12/significance-and-implementation-of-polymorphism.html,感谢分享 什么是多态机制? 是父类或接口定义的引用变量可以 指向子类或实现类的实例对象 ,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实现对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。 浅谈多态机制的意义及实现 在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP。这也是为什么有人说,使用面向对象语言的编程和面向对象的编程是两码事。 多态并没有一个严格的定义,维基百科上给它下的定义比较宽松: Subtype polymorphism, almost universally called just polymorphism in the context of object-oriented programming, is the ability of one type, A, to appear as and be used like another type, B. 一、子类型和子类 这里我想先提一下 子类型(Subtype) 这个词和 子类

安卓开发过程中空指针的问题Java.lang.NullPointerException

依然范特西╮ 提交于 2020-03-09 07:44:14
最近做一个新闻客户端的应用,经常出现空指针的问题,我想一方面可能是自己水平有限,二是开发过程中有一些遗漏的地方。一般情况下新手出现空指针的概率较高。下面来总结一下经常出现的问题。 1.所谓的指针,就是java中的对象的引用。比如String s;这个s就是指针。 2.所谓的空指针,就是指针的内容为空,比如上面的s,如果令它指向null,就是空指针。 3.所谓的空指针异常,就是一个指针是空指针,你还要去操作它,既然它指向的是空对象,它就不能使用这个对象的方法。比如上面的s假如为null,你还要用s的方法,比如s.equals( String x);那么就会产生空指针异常。 原因: 1字符串变量未初始化; 2接口类型的对象没有用具体的类初始化,比如: List lt;会报错 List lt = new ArrayList();则不会报错了 3当一个对象的值为空时,你没有判断为空的情况。你可以试着把下面的代码前加一行代码: if(rb!=null && rb!="") 改成: if(rb==null); if(rb!==null&&rb!="") 或者if((“”).equals(rb)) 解决办法: 代码段1: out.println(request.getParameter("username")); 分析:代码段1的功能十分简单,就是输出用户输入"username"的值。 说明

c语言指针详解

雨燕双飞 提交于 2020-03-09 06:47:55
c语言指针 1.指针是什么? 在c语言中指针和其他变量没有区别,例如 int a 和 int * b,我们可以看做为变量a 与变量b,只是 a存储的是整数值,而b存储的是整数变量的地址!!划重点地址!!! 2.指针的运算 int*a ,float*b,char *c,double*d a++ ,b++,c++, d++, 有什么区别? 已知 int 4字节 float 4个字节 char1个字节 double 8个字节 因为他们占据这些字节,而这些字节体现到内存上, 所以指针 a++ 偏移为4 ,float++偏移 4…依次类推 通过以上的结果我们可以归纳出 ​ 内存的存储长度与内存里面所存储的类型有关!!!划重点 3.指针与一维数组二维数组多维数组 一维数组与指针 int a[9] = {1,2,3,4,5,6,7,8,9}; ①a是什么? a是数组首元素的地址,意思在这个数组中 a代表 首元素1所在的地址 ②a的类型是什么? 因为a是首元素的地址,首元素为int类型,那么a为int *类型 ③a++的含义是什么?有什么用? a++代表往后移动四个字节,至于为啥四个字节呢 因为a是一个地址它存储的是int类型,所以在偏移四个字节后可以访问到a[1] 具体的用处可以用a++,访问数组中的值,可以用a[0] 中括号的方式访问到数组的值 ④写个程序来证明上方是对的 #include