指针

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

已知链表中含有环,返回这个环的起始位置

此生再无相见时 提交于 2020-01-26 09:46:23
已知链表中含有环,返回这个环的起始位置 继上一篇博客关于双指针(快慢指针)判断是否有环,这篇关于已知链表有环,返回这个环的起始位置 先来看代码: Node * detectCycle ( Node * head ) { Node * fast , * slow ; fast = slow = head ; while ( fast != null && fast . next != null ) { fast = fast . next . next ; slow = slow . next ; if ( fast == slow ) break ; } slow = head ; while ( slow != fast ) { fast = fast . next ; slow = slow . next ; } return slow ; } 一步一步来看: 首先 fast = slow = head ; while ( fast != null && fast . next != null ) { fast = fast . next . next ; slow = slow . next ; if ( fast == slow ) break ; } 这一段代码表示,在这个有环代码中,slow与速度为其二倍的fast 相遇,并停留在相遇地点。因为上一篇解释过了

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++的算术类型必须满足各种硬件特质

C++函数调用之——值传递、指针传递、引用传递

你离开我真会死。 提交于 2020-01-26 02:43:43
1、简介   1、值传递:形参时实参的拷贝,改变函数形参并不影响函数外部的实参,这是最常用的一种传递方式,也是最简单的一种传递方式。只需要传递参数,返回值是return考虑的;使用值传递这种方式,调用函数不对实参进行操作,也就是说,即使形参的值发生改变,实参的值也完全不受影响。   2、指针传递:指针传递其实是值传递的一种,它传递的是地址。值传递过程中,被调函数的形参作为被调函数的局部变量来处理,即在函数的栈中有开辟了内存空间来存放主调函数放进来实参的值,从而成为一个副本。因为指针传递的是外部参数的地址,当调用函数的形参发生改变时,自然外部实参也发生改变。   3、引用传递:被调函数的形参虽然也作为局部变量在栈中开辟了内存空间,但在栈中放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被间接寻址,即通过栈中的存放的地址访问主调函数中的中的实参变量(相当于一个人有两个名字),因此形参在任意改动都直接影响到实参。 2、例程   1、值传递 #include <iostream> using namespace std; void swap(int,int); int main() { int a=1,b=2; cout<<"a="<<a<<",b="<<b<<endl; swap(a,b); cout<<"a="<<a<<",b="<<b<<endl; return 0

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.

指针和引用

China☆狼群 提交于 2020-01-25 23:11:48
#include <iostream> using namespace std; int main() { int i=42,j=4; int *pi=&i,&r=i; pi=&i; cout<<*pi<<endl; cout<<r; } 代码很短,也很简单。只是为了做个记录。 int *pi=&i, 为什么一开始,需要声明指针p,所以可以使用*pi=&i pi=&i; 后来在指针p定义之后,就需要正规的方法, 即为:pi为一个指针,存储i的地址。所以为 pi=&i; &r=i; 此为引用。 引用和指针的区别,引用定义后,引用的内容不可改变,而指针可以改变。 来源: CSDN 作者: captionyao 链接: https://blog.csdn.net/qq_38436175/article/details/104041183

MySQL中的索引

五迷三道 提交于 2020-01-25 21:52:06
索引是一个比较复杂的模块,要学好需要多花点时间。索引是MySQL进行查询优化的一个很重要的手段,如果用得好,可以成为数据访问的有力而且灵活的工具,快速提高查询效率,所以多花点时间好好学习和思考这一块内容也是很值得的。下面,对MySQL中索引的内容做了一下归纳总结,有点零散。 01、索引基础 1、索引是存储引擎用于快速找到记录的一种数据结构。 2、索引是对查询性能优化最有效的手段。 3、B-树索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,取而代之的是索引的根节点开始进行搜索。根节点的槽中存放了指向子节点的指针,存储引擎根据这些指针向下层查找。通过比较节点页的值和要查找的值可以找到合适的指针进入下一层子节点,这些指针实际上定义了子节点页中值的上限和下限。最终存储引擎要么是找到对应的值,要么该记录不存在。 4、B-树对索引列是顺序组织存储的,所以很适合查找范围数据。 5、使用B-树索引适用于全键值、键值范围或键前缀查找。具体地: (1)全值匹配 (2)匹配最左前缀 (3)匹配列前缀 (4)匹配范围值 (5)精确匹配某一列并范围匹配另一列 (6)只访问索引的查询 6、如果不是按照索引的最左列开始查找,则无法使用索引。 7、不能跳过索引中的列。 8、如果查询中有某个列的范围查找,则其右边所有列都无法使用索引优化查找。 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" 。