指针

数据结构,算法及线性表总结

て烟熏妆下的殇ゞ 提交于 2020-03-28 20:44:20
1.思维导图 2.重要概念笔记 1.数据结构 1.数据结构定义 -我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对元素进行排序等)而执行的相应操作,这个相应的操作也叫算法。 2.算法 -衡量算法的标准: -时间复杂度:程序大概要执行的次数,而非执行的时间 -空间复杂度:程序执行过程中大概所占用的最大内存空间 -难易程度:用易懂,避免过于复杂 -健壮性 3.连续存储【数组】 -什么叫数组:元素类型相同,大小相等 -数组的优缺点 --优点:存取速度很快 --缺点:插入删除元素很慢 4.离散结构【链表】 -定义:n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点同时每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点 -专业术语 --首节点:存放第一个有效数据的节点 --尾节点:存放最后一个有效数据的节点 --头结点:位于首节点之前的一个节点,头结点并不存放有效的数据,加头结点的目的主要是为了方便对链表的操作 --头指针:指向头结点的指针变量 --尾指针:指向尾节点的指针变量 -确定一个链表需要几个参数:只需要一个头指针参数,因为我们通过头指针可以推算出链表的其他所有信息 -分类: --单链表:每一个节点只有一个指针域 --双链表:每一个节点有两个指针域 -

链表

杀马特。学长 韩版系。学妹 提交于 2020-03-28 12:38:46
指针的作用用来存储地址 int a; int *p; 定义一个存储整型变量的地址的指针 p=&a; 保存a的地址; pritnf("%d," *p); 输出p存储地址的值 *的作用{1.表乘法 2.申明一个指针,在定义指针变量时使用 3.间接运算符,取得指针所指向的内存中的值} #include<iostream> #include<cstdlib> using namespace std; struct node{ int date; struct node *next; }; int main(){ int n,date,number; struct node *head,*q,*p,*t; head=NULL; cin>>n; for(int i=1;i<=n;i++){ cin>>date; p=(struct node *)malloc(sizeof(struct node)); p->date=date; p->next=NULL; if(head == NULL){ head=p; }else{ q->next=p; } q=p; } t=head; while(t!=NULL){ cout<<t->date<<' '; t=t->next; } //Insert a number cin>>number; t=head; while(t!=NULL){ if(t-

Go语言基础之指针

心已入冬 提交于 2020-03-28 12:38:02
前言 区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。 什么是指针 不管是Python还是Go程序 执行过程中数据载入内存后,在计算机内存中都有它们的内地址,这就是指针。 指针的作用就是 保存某1个数据在内存中的内存地址, 方便我们在内存中快速查找到该数据(变量)。 在Go语言中的 值类型 (int、float、bool、string、array、struct) 都有对应的指针类型 ,如: *int 、 *int64 、 *string 等。 指针操作 package main import "fmt" func main() { //基本数据类型在内存中的布局 var i int = 10 //获取变量i的内存地址 fmt.Println("变量i的内存地址:", &i) //声明1个 ptr指针变量,指向1个类型为int的内存地址 var ptr *int = &i fmt.Println(ptr) //获取指针的内存地址 fmt.Println(&ptr) //通过指针获取变量i对应的值(10) fmt.Println(*ptr) //通过指针修改变量i对应的值 *ptr = 222 fmt.Println(i) //通过指针修改变量的值 name := "成龙" age := "18" por1 := &name *por1 =

多余的判断

荒凉一梦 提交于 2020-03-28 07:48:19
1、很多时候,我们申请内存后都会添加判断,例如: {   int* p = new int;   if (!p)     return; } 其实后面两行是多余的,因为如果new失败了,会抛异常,根本跑不到下面的if语句就爆了。 2、但是平时养成个好习惯,指针定义或者初始化的时候设为NULL,使用前判断是否NULL,还是有必要的。 例如: stTest* p = NULL; ...... if (p) {   p->..... } 这样不用担心野指针或者是空指针。 3、用完记住释放哦。 if (p) {   delete p;   p = NULL; } 来源: https://www.cnblogs.com/yuohoo/archive/2011/07/06/2099535.html

C++指针系列

删除回忆录丶 提交于 2020-03-28 05:20:46
写这篇文章总结C++指针的用法。 在C++中最好不要用new/delete来使用指针,而应该用智能指针来管理资源,智能指针就属boost做得最好了。boost的源码和使用方法在网上随便一搜就可以找到,在此就不哆嗦了。下面进入正文—— 最后的指针 1. delete , delete[]的区别   虽然要放弃new/delete的用法,但在这里还是要讲一个值得注意的地方。   int* arr=new int[3]; //不同于new int(3),用[]是指明arr是具有3项的数组,而()是给申明一个整数,其初值为3   在这总情况下,下面两种delete都正确   delete arr; //OR delete [] arr; 2. const不同位置的区别 const int *p = new int(4); //或者 int const *p = new int(4); 这里用const后,就不能 *p = 5 ; 进行赋值。这时*p所指内容不能修改。 int *const p = new int(4); 不能用 p = NULL ; 这里p本身不能被修改 3. 将指针作为参数时的注意事项 如果将一个指针传入函数,并且在这个函数中分配内存后再赋值,那么得用两维指针。如下 void GetValue(int *v) //这个代码是错误的 { v = new int; *v =

C++this指针详解

心不动则不痛 提交于 2020-03-28 05:18:12
  以前对this指针误解挺多的,在这里单独写一篇进行总结,有不对之处,欢迎指正批评! 一、问题 1.一个类中的不同对象在调用自己的成员函数时,其实它们调用的是同一段函数代码,那么成员函数如何知道要访问哪个对象的数据成员呢?   没错,就是通过this指针。每个对象都拥有一个this指针,this指针记录对象的内存地址,当我们调用成员函数时,成员函数默认第一个参数为T* const register this,大多数编译器通过ecx寄存器传递this指针,通过 this 这个隐式参数可以访问该对象的数据成员。 2.类的成员函数为什么不能用static和const同时修饰?   类中用const修饰的函数通常用来防止修改对象的数据成员,函数末尾的const是用来修饰this指针,防止在函数内对数据成员进行修改,而静态函数中是没有this指针的,无法访问到对象的数据成员,与C++ static语义冲突,所以不能。 二、this指针注意点 1.C++中 this关键字 是一个指向对象自己的一个常量指针,不能给this赋值; 2.只有成员函数才有this指针,友元函数不是类的成员函数,没有this指针; 3.同样静态函数也是没有this指针的,静态函数如同静态变量一样,不属于具体的哪一个对象; 4.this指针作用域在类成员函数内部,在类外也无法获取; 5.this指针并不是对象的一部分

空指针解惑

倖福魔咒の 提交于 2020-03-28 05:17:18
空指针的简单描述: 它 “与任何对象或函数的指针值都不相等”。也就是说, 取地址操作符 & 永远也不能得到空指针, 同样对 malloc() 的成功调用也不会返回空指针, 如果失败, malloc() 的确返回空指针, 这是空指针的典型用法:表示 “未分配”或者 “尚未指向任何地方”的指针。 ======================================================================================== 空指针和未初始化的指针: 空指针在概念上不同于未初始化的指针。空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方。 ======================================================================================== 空指针和 0 根据语言定义, 在指针上下文中的常数 0 会在编译时转换为空指针。 具体如下: ------------------------------------------------------------------------------------ 可以使用未加修饰的0 需要显示的类型转换 ------------------------------------------------------

JVM史上最最最完整深入解析(12000字噢)

空扰寡人 提交于 2020-03-27 18:12:07
3 月,跳不动了?>>> 点点这个链接免费获取: 【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> 工作之余,总结一下JVM相关知识。 Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图: 1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。 2、虚拟机栈:虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕获的异常时,栈帧就会出栈。(1)栈帧:栈帧存储方法的相关信息,包含局部变量数表、返回值、操作数栈、动态链接a、局部变量表:包含了方法执行过程中的所有变量。局部变量数组所需要的空间在编译期间完成分配,在方法运行期间不会改变局部变量数组的大小。b、返回值:如果有返回值的话,压入调用者栈帧中的操作数栈中,并且把PC的值指向 方法调用指令 后面的一条指令地址。c、操作数栈:操作变量的内存模型。操作数栈的最大深度在编译的时候已经确定(写入方法区code属性的max_stacks项中)。操作数栈的的元素可以是任意Java类型,包括long和double

Objective-C--- 多态 、 协议

点点圈 提交于 2020-03-27 08:11:38
1 编写交通工具程序 1.1 问题 本案例需要创建一个TRTransportation类,类中有一个方法叫print的方法,该方法默认输出 “显示交通工具信息”,这个类作为父类,派生出三个子类TRTaxi的士类、TRBus巴士类和TRBike 自行车类。TRTaxi的士类覆盖了父类的print方法,改成自己的输出,"交通工具为的士";TRBus巴士类覆盖了父类的print方法,改成自己的输出,"交通工具为巴士";TRBike 自行车类覆盖了父类的print方法,改成自己的输出,"交通工具为单车"。 在主程序中,创建三个交通工具,使用多态输出交通工具信息。 1.2 步骤 实现此案例需要按照如下步骤进行。 步骤一:定义TRTransportation类 首先,在Day04工程中新添加TRTransportation.h文件,用于定义新的类TRTransportation。 代码如下所示: # import <Foundation /Foundation .h > @ interface TRTRansportation : NSObject -( void )print ; @end 在上述代码中,为TRTransportation类添加一个方法print,用于输出信息“显示交通工具信息”到控制台。 然后,在类TRTransportation的实现部分

MRC-block与ARC-block

a 夏天 提交于 2020-03-25 23:24:25
Block专辑: Block讲解一 MRC-block与ARC-block Block详解一(底层分析) 今天讲述Block的最后一篇,后两篇仅仅是加深1,2篇的理解,废话少说,开始讲解! __block细节 __block内存管理 循环引用问题 一:__block细节 大家可能会遇到下面的问题,block的内部想要修改外部的auto变量,但是编译器会报问题!如下 如果block内部想要修改外部的auto变量,可以在int age 前面加入static修饰词,变为静态局部变量(会一直存在内存中,反而不好),以及可以将int age代码移植到函数外面变为全局变量! 除此之外还有没有其他的做法了呢,显然是有的,通过__block修饰,如下: 发现__block修改外面变量是可以达到目的的! 小结论 __block可以用于解决block内部无法修饰auto变量值的问题 __block不能修饰全局变量、静态变量(static) 编译器会将__block变量包装成一个对象 通过命令 xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m 生成main.cpp代码查看原理 上面提到可以将int main函数的代码简化一下,简化成如下 首先拿到forwarding指针然后再拿到age的值 二:__block的内存管理 1.