指针变量

学习JDK1.8集合源码之--ArrayDeque

谁说我不能喝 提交于 2020-01-26 11:14:52
1. ArrayDeque简介   ArrayDeque是基于数组实现的一种双端队列,既可以当成普通的队列用(先进先出),也可以当成栈来用(后进先出),故ArrayDeque完全可以代替Stack,ArrayDeque是非线程安全的,Stack是线程安全的。   ArrayDeque虽然是基于数组实现的,但很容易被数组这种数据结构所迷惑。因为数组是从0开始到length-1位置结束的,但ArrayDeque的实现实际上是一种循环结构的队列,首尾位置完全靠head和tail两个首尾指针来决定的,正常理解的情况下head的值应该比tail小,但是这里会出现head比tail大的情况。所以这里我们不能以正常数组的角度去看待,我可以把这个数组看成一个环形结构的首尾相连的结构,即数组最后一位的下一位就是第一位(不要习惯性把0当成头部,length-1当成尾部),数据都存储在head右边及tail的左边,不知道有没有说清楚~~   除此之外,ArrayDeque对队列的容量有特殊的要求,必须是2^n(这里和HashMap类似),由于2^31超出int的最大值,故ArrayDeque的最大容量为2^30。ArrayDeque不允许存储null值,原因是需要通过取出的元素是否为null来判断队列是否为空。   关于更多关于ArrayDeque的讲解,这篇文章讲的很好: 【源】ArrayDeque

C++基础内容复习

陌路散爱 提交于 2020-01-26 09:50:31
下列语句定义了5个变量: int count; double sales_price,sum; std::string title; Sales_item bookItem; 每个定义都是以 类型说明符 开始,如上int、double、std::string、Sales_item都是类型名,其中int和doubleshi是 内置类型 ,std::string是 标准库定义的类型 (需要#include <string>), Sales_item是 自定义类型 。 ::作用域操作符,含义是右操作符的名字可以在左操作数的作用域中找到 简化std::string 的写法是使用using。 比如使用using std::string; using std:cin;之后,在下面的代码中就可以直接使用string和cin了。 当进行string对象和字符串字面量混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的。 比如,如下s1的初始化时正确的 string item ="what a mess!"; string s1 =item +","; 但是:string s1 ="what a mess!" +","; 就会报错,这个和C#是 完全不一样 的。 虽然任何整数数值都可以作为索引,但是索引的实际数据类型却是unsigned类型的string::size_type

c++ this指针

南笙酒味 提交于 2020-01-26 07:14:22
今天把this知识点做个汇总。 1.什么是this 先要理解class的意思,class应该理解为一种类型,象int,char一样,是用户自定义的类型。(虽然比int char这样build-in类型复杂的多,但首先要理解 它们一样是类型)。用这个类型可以来声明一个变量,比如int x, myclass my等。这样就像变量x具有int类型一样,变量my具有myclass类型。理解了这 个,就好解释this了,my的this 就是指向my的指针。如果还有一个变量myclass mz,mz的this就是指向mz的指针,对其的解引用*this就应该是一个 myclass类型的变量。如果有成员函数被调用,比如a.sum(),则sum函数可以通过隐形形参this来访问a,所以this是被调用对象访问调用他的对象的工 具,可以理解为this指向调用他的对象。默认情况下,this的类型是指向类类型非常量的常量指针,所以默认情况下,初始化时,我们不能把this绑定到 一个常量对象上去,因此,在参数列表的后面加上 const 修改this的属性,让其可以指向一个常量对象,可以增加函数的灵活性,这个成员函数也叫常 量成员函数。 2.this的用处 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部

C++基础:变量和基本类型

前提是你 提交于 2020-01-26 05:09:51
基本内置类型 一、基本内置类型 C++定义了一套包括算术类型(arithmetic type) 和空类型(void) 在内的基本数据类型。其中算术类型包含了字符、整型数、布尔值和浮点数。空类型不对应具体的值,仅用于一些特殊的场合,例如最常见的是,当函数不返回任何值时使用空类型作为返回类型。 二、算术类型 算术类型分为两类:整型(integral type,包括字符和布尔类型在内)和浮点型。 带符号类型和无符号类型 除去布尔型和扩展的字符型之外,其他整型可以划分为带符号的(signed) 和无符号的(unsigned) 两种。带符号类型可以表示正数、负数或0,无符号类型则仅能表示大于等于0的值。 类型int、short、 long 和long long 都是带符号的,通过在这些类型名前添加unsigned就可以得到无符号类型,例如unsigned long。 类型unsigned int 可以缩写为unsigned。 与其他整型不同,字符型被分为了三种: char、signed char和unsigned char。特别需要注意的是:类型char和类型signed char并不一样。类型char实际上会表现为上述两种形式中的一种,具体是哪种由编译器决定。 建议:如何选择类型 和C语言一样,C++的设计准则之一也是尽可能地接近硬件。C++的算术类型必须满足各种硬件特质

Nginx学习笔记 ---高级数据结构

寵の児 提交于 2020-01-26 03:15:31
动态数组 ngx_array_t 表示一块连续的内存,其中存放着数组元素,概念上和原始数组很接近 // 定义在 core/ngx_array.h typedef struct { void * elts ; // 数组的内存位置,即数组首地址 ngx_uint_t nelts ; // 数组当前的元素数量 size_t size ; // 数组元素的大小 ngx_uint_t nalloc ; // 数组可容纳的最多元素容量 ngx_pool_t * pool ; // 数组可使用的内存池 } ngx_array_t ; elts 就是原始的数组,定义成 void*,使用时应强转成相应的类型 nelts 相当于 vector.size(); size 相当于 sizeof(T); nalloc 相当于 vector.capacity(); pool 数组使用的内存池,相当于 vector 的 allocator 数组里的元素不断增加,当 nelts > nalloc 时将引起数组扩容,ngx_array_t 会向内存池 pool 申请一块两倍原大小的空间————这个策略和 std::vector 是一样的 但 ngx_array_t 扩容成本太高,它需要重新分配内存并且将数据拷贝,所以最好一次性分配足够的空间,避免动态扩容 操作函数: 使用 ngx_array_t.elts

10. 第 10 章 指针

吃可爱长大的小学妹 提交于 2020-01-25 23:49:40
1. 内存的每一个字节都有一个地址,变量的地址是首字节的地址。(比如一个 int 类型有 4 个字节,但是将第一个字节的地址作为整个变量的地址) 2. 数组名是一个常量指针。 3. 用 nullptr 来指示一个无效的内存地址。 4. 给函数传递指针,与传递引用可以起到相同的效果。但是引用比指针更容易处理,因为它隐藏了所有的解引用和间接引用机制。在处理 c 字符串时,最好使用指针。 5. 指向 const 的指针作形参,既能接收常量实参的地址,也可以接收非常量实参的地址。(指向 const 的指针可以理解为指向常量数据的指针,指针指向的数据不能改变,但是指针本身可以改变。而 const 指针的意思  是, 指针本身是一个常量,被初始化之后,指针本身的值不能改变) 6. 动态内存分配只能通过指针来实现,它可以允许程序根据需要临时创建变量(通过 new 运算符来完成,更多的是用它创建一个动态数组)。 7. 使用 new 时,会从堆中分配内存,使用完毕后,应该使用 delete 来释放内存,否则会出现内存泄漏。在对指针调用 delete 之后,应该立刻给指针赋值为 nullptr , 表明该指针不再指向一个有效的内存。 8. 避免悬空指针的方法:(1)在释放内存后,立刻将指针的值设置为 nullptr。(2)在试图访问指针的值之前,先判断指针是否为空。 9.

重新认识C语言指针(上)

五迷三道 提交于 2020-01-25 20:37:37
​ 独创性并不是首次观察某种新事物,而是把旧的、很早就是已知的,或者是人人都视而不见的事物当新事物观察,这才证明是有真正的独创头脑 —尼采 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。 https://github.com/midou-tech/articles 点关注,不迷路!!! 序言  指针是C语言学习者绕不过的一道坎,也是C语言学习者不得绕过的一道坎。辨别一个人C语言学的好赖就看他对指针的理解怎么样。指针内容也是工作面试经常问到的问题。本文将带你重新认识那个绊倒你的指针,以解大家的心头之惑(恨)。 为什么要学习指针?  有同学就要说了,既然指针这么难,这么不通俗易懂,为什么要学习他呢?其他高级语言都是把这块基本屏蔽掉了,不在让程序员直接操作指针,这里不直接操作指的是不让程序员用指针进行运算和强转而不是彻底没有了。举个java的例子 Object obj= new Object(); Object sec= obj; sec = new Object();  如果你去仔细研究他们的行为,就会发现 obj, sec 都只是一个指向对象的东西,可以为空,也可以修改指向,所以它们其实都是指针,只是 Java 的教材里面不在去提这东西而已,具体原因看我后面讲解便知道了。 ​ 继续说为什么学习指针,为什么学习指针就必须要说到指针的优点了。

char s []和char * s有什么区别?

风流意气都作罢 提交于 2020-01-25 19:57:48
在C语言中,可以在这样的声明中使用字符串文字: char s[] = "hello"; 或像这样: char *s = "hello"; 那么区别是什么呢? 我想知道在编译和运行时在存储持续时间方面实际发生了什么。 #1楼 只需添加:它们的大小也会得到不同的值。 printf("sizeof s[] = %zu\n", sizeof(s)); //6 printf("sizeof *s = %zu\n", sizeof(s)); //4 or 8 如上所述,对于数组 '\\0' 将分配为最后一个元素。 #2楼 区别在于 char *s = "Hello world"; 将放置 "Hello world" 在内存的只读部分 ,使 s 的指针,使得在这个内存非法任何写入操作。 这样做时: char s[] = "Hello world"; 将文字字符串放入只读内存中,并将该字符串复制到堆栈上新分配的内存中。 因此 s[0] = 'J'; 法律。 #3楼 char s[] = "hello"; 声明 s 为 char 数组,该数组足以容纳初始化程序(5 + 1 char s),并通过将给定字符串文字的成员复制到数组中来初始化该数组。 char *s = "hello"; 声明 s 到是指向一个或多个(更在这种情况下) char S和点直接在包含文字固定(只读)位置 "hello" 。

chapter3 异常

耗尽温柔 提交于 2020-01-25 16:20:27
大纲: 1、普通函数异常发生,防止局部资源泄漏 2、构造函数异常发生,防止局部资源泄漏 3、禁止析构函数发生的异常传递到调用者 4、抛出异常、传递参数、调用虚函数差别 5、比较异常传递方式 6、慎用异常规格 1、普通函数异常发生,防止局部资源泄漏 异常处理机制: 没有任何的异常捕获机制,将导致程序的控制权到调用者上,原有程序逻辑将不会被执行。相反,如果有异常捕获机制,我们就可以控制程序的执行逻辑。 局部资源,这里指代指针所指向堆资源。 解决方法: 用对象代替指针,对象的析构函数内释放资源。当函数返回时(正常/异常),函数体内的局部对象确保会调用其析构函数来释放资源。 标准类库中auto_ptr<T>可用来支持上述阐述: 构造函数内,使指针指向堆对象 析构函数内,释放堆对象及其占用空间 借鉴auto_ptr<T>的实现方法,对于任何资源,我们将其关联到一个对象上,析构函数内实现资源的释放。 2、构造函数异常发生,防止局部资源泄漏 构造函数内何时发生异常? 在构造函数内尝试分配内存并初始化对象,内存不够,将引发异常,此时程序的控制权将转至调用构造函数的地方。构造函数没有完全被执行, C++对于不完整的对象,在离开其生存空间时,将不会执行对象的析构函数,资源泄漏发生了。 解决方法: 在构造函数内部捕获到异常,释放资源,在向上传递异常。而不是直接将异常向上传递,一旦向上传递

带你重新认识指针(下)

天大地大妈咪最大 提交于 2020-01-25 13:50:27
真的猛士,敢于直面惨淡的人生,敢于正视淋漓的鲜血。这是怎样的哀痛者和幸福者?然而造化又常常为庸人设计,以时间的流驶,来洗涤旧迹,仅使留下淡红的血色和微漠的悲哀。在这淡红的血色和微漠的悲哀中,又给人暂得偷生,维持着这似人非人的世界。我不知道这样的世界何时是一个尽头!我们还在这样的世上活着;我也早觉得有写一点东西的必要了。 ——鲁迅 <p align="center">本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。</p> <h4 align="center"><a href=" https://github.com/midou-tech/articles " target="_blank"> https://github.com/midou-tech/articles</a></h4&gt ; <h4 style="color:red;text-align:center">点关注,不迷路!!! </h4>   看完我上一篇指针的讲解之后很多同学反馈很不错,有网友给私信说之前在大学里面一直搞不懂指针的问题,说到指针都是云里雾里,老师讲的也是很难听懂 , 点击即可进入 指针(上) 。也有很多网友表示非常期待指针下的文章,所以我就马不停蹄的继续写 ,下 主要讲解指针的特性以及指针安全问题。 指针的特性 指针和常量  先说下什么是常量,常量就是不可变的量