指针

git reset --soft/mixed/hard [版本号]命令对比

喜夏-厌秋 提交于 2020-01-29 18:04:40
三个参数: 三个参数:soft、mixed、hard git reset – soft [版本号] git reset – mixed [版本号] git reset – hard [版本号] 三个参数的对比: 相同点: 都是用于版本的回退或者前进 不同点: 关于soft参数: 作用:仅仅在本地库移动HEAD指针 可以这么理解,原来的工作区、暂存区、本地库是同一个版本(如下图): 但执行 git reset --soft [某一版本号] 之后,仅仅在本地库移动HEAD指针,如下图(以版本后退为例): 这样一来,本地库其他两个版本不一致,好像是文件从工作区提交到暂存区之后,没有提交到本地库。 关于mixed参数: 作用: 1.在本地库移动HEAD指针 2.重置暂存区 同样三者原来是同一个版本,执行 git reset --mixed [某一版本号] 之后,如下图所示(以版本后退为例): 这样一来,本地库和暂存区的指针向后移动,就好像是工作区的文件未追踪,没有提交到暂存区、本地库。 关于hard参数: 作用: 1.在本地库移动HEAD指针 2.重置暂存区 3.重置工作区 所以三个指针同时移动,版本正常前进后退。 来源: CSDN 作者: 你的代码没bug 链接: https://blog.csdn.net/weixin_44915226/article/details

无类型指针、空指针和野指针

笑着哭i 提交于 2020-01-29 17:57:49
1、无类型指针:void *p; 不指定它指向具体哪种数据类型。可以通过强制转化将void *转化为其他类型指针,也可以用(void *)将其他类型指针强制转化为void类型指针。指针之间赋值需要类型相同,但任何类型的指针都可以赋值给void *。 2、空指针:NULL NULL在C语言中的定义为(void *)0。空指针就是指向了NULL的指针变量。如果一个指针不能确定指向任何一个变量的地址,应将这个指针设置为空指针。 3、野指针 野指针,没有指向任何有效地址的指针变量,所以在代码中避免出现野指针。 来源: CSDN 作者: 星尘亦星辰 链接: https://blog.csdn.net/Mrweng1996/article/details/104106415

指针

China☆狼群 提交于 2020-01-29 11:18:44
指针的作用 减少内存消耗 来源: CSDN 作者: KiT_TQi 链接: https://blog.csdn.net/weixin_45727188/article/details/104104424

烦人的const 把我搞晕了

寵の児 提交于 2020-01-29 10:48:11
转载 自CSDN博客: http://blog.csdn.net/eroswang/archive/2009/05/20/4204693.aspx Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示: 1 可以定义const常量   const int Max = 100; 2 便于进行类型检查 const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误 void f(const int i) { .........} //对传入的参数进行类型检查,不匹配进行提示 3 可以保护被修饰的东西 防止意外的修改,增强程序的健壮性。 void f(const int i) { i=10;//error! } //如果在函数体内修改了i,编译器就会报错 4 可以很方便地进行参数的调整和修改 同宏定义一样,可以做到不变则已,一变都变   5 为函数重载提供了一个参考   class A { ...... void f(int i) {......} //一个函数 void f(int i) const {......} //上一个函数的重载 ...... }; 6 可以节省空间

git reset和 git revert

主宰稳场 提交于 2020-01-29 08:17:10
介绍 在版本迭代开发过程中,相信很多人都会有过错误提交的时候(至少良许有过几次这样的体验)。这种情况下,菜鸟程序员可能就会虎驱一震,紧张得不知所措。而资深程序员就会微微一笑,摸一摸锃亮的脑门,然后默默的进行版本回退。 对于版本的回退,我们经常会用到两个命令: git reset git revert 那这两个命令有何区别呢?先不急,我们后文详细介绍。 git reset 假如我们的系统现在有如下几个提交: 在这里插入图片描述 其中:A 和 B 是正常提交,而 C 和 D 是错误提交。现在,我们想把 C 和 D 回退掉。而此时,HEAD 指针指向 D 提交(5lk4er)。我们只需将 HEAD 指针移动到 B 提交(a0fvf8),就可以达到目的。 只要有 git 基础的朋友,一定会想到 git reset 命令。完整命令如下: git reset --hard a0fvf8 命令运行之后,HEAD 指针就会移动到 B 提交下,如下图示: 在这里插入图片描述 而这个时候,远程仓库的 HEAD 指针依然不变,仍在 D 提交上。所以,如果直接使用 git push 命令的话,将无法将更改推到远程仓库。此时,只能使用 -f 选项将提交强制推到远程仓库: git push -f 采用这种方式回退代码的弊端显而易见,那就是会使 HEAD 指针往回移动,从而会失去之后的提交信息。将来如果突然发现

Leetcode42.接雨水——双指针法

强颜欢笑 提交于 2020-01-29 08:15:56
文章目录 引入 双指针法 引入 本题是这样的: 42.接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 题目给出的图片一眼就能了然题目要问的是什么。 很明显,某一列能装多少水,取决于该列左侧和右侧的高度的最小值。 最无脑的做法就是,对每一列求其左右的最大值,也就是用额外的两个O(N)大小的数组空间来存储每一列的最大值和最小值。 该方法时间复杂度也是O(N),不过是需要2-3次遍历数组(求最大值一次,最小值一次,然后求盛水高度一次,后面两次可以合并)。 不过,我希望能够一次遍历完成计算,并且不需要使用额外的数组空间,一开始我是这样写的: class Solution { public int trap ( int [ ] height ) { int output = 0 ; int left = height [ 0 ] ; for ( int i = 1 ; i < height . length ; i ++ ) { if ( height [ i ] < left ) output += ( left - height [ i ] ) ; else { left = height [ i ] ; } } return output ; } } 这样写,值考虑左侧的值,并没有考虑右侧值是否比左侧值更小,当然是错的

const关键字

不打扰是莪最后的温柔 提交于 2020-01-29 07:12:56
const关键字 写过一些知识点的文章,但是写的都比较粗糙,总是自己学会了就简略的写一下,自己都看不下去了,从今天开始,认真的写每一篇文章,尽量使像我第一样的的菜鸡也可以理解、明白。 下面主要介绍const关键字的四个作用。 ps:不保证所说的每一话都正确 请大佬略过 小白可以看看。 1:const 和普通变量 2:const 和指针 3:const 和函数 4:const 和类及其对象 1.const 和普通变量 这个是最简单最容易理解的,在声明变量时,在前面加上一个const 这样就定义了一个常量,比如:const float pi = 3.14或者float const pi = 3.14 ,两者一样,此时pi就成为了一个常量。 2. const和指针 这个主要包含两个名词 :指针常量、常量指针 我在初学的时候,一直记不清或者说记混这两个名字,今天在这里分享一下记忆的方法。简单点说,谁在前面谁就是不可改变的,比如说:常量指针,常量在前面,这个就是const在修饰那个常量,常量就不能改变,这个指针的值可以改变,在下面我会附上代码 进行展示。指针常量类似。正式一点说就是const这个关键字修饰谁,谁就是常量,就是不能被改变。 const int *p = &a; 常量指针一旦初始化完成,它的值,也就是它所放在指针中的地址就不能变 int const *p = &a; /

leetcode_142. 环形链表 II

蓝咒 提交于 2020-01-29 06:04:09
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:tail connects to node index 1 解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入:head = [1,2], pos = 0 输出:tail connects to node index 0 解释:链表中有一个环,其尾部连接到第一个节点。 示例 3: 输入:head = [1], pos = -1 输出:no cycle 解释:链表中没有环。 进阶: 你是否可以不用额外空间解决此题? 解析:本题在 上一题 的基础上要求返回环的入口,而上一题的代码仅能够证明是否存在环。 以下是不怎么严谨的数学证明。 设快指针移动步数为f,慢指针移动步数为s 设链表从头节点到链表入口的距离为a,链表环的长度为b,则整个链表的长度为a+b 首先快指针每次移动两步,慢指针每次移动一步. f = 2 * s 当发生上一题的情况,即快指针与慢指针相遇时,必然发生了“套圈”现象。即快指针比满指针多绕环移动了n圈 f = s + n * b

指针常量、常量指针、指向常量的指针常量的区别以及数组名的本质

◇◆丶佛笑我妖孽 提交于 2020-01-29 05:46:56
1、指针常量(*const):对应指针变量,即指针本身是常量,指针指向的内容可以被修改。 数据类型 * const 指针变量=变量名(或取地址); int * const p ; 2、常量指针(const*):常量的指针,即指针指向的内容不能被修改,但指针本身是变量,可以被修改。 数据类型 const * 指针变量=变量名(或取地址); int const * p ; const int * p ; //都可以 3、指向常量的指针常量:即指针本身是常量,指向的内容也是常量,都不能修改。 -const 数据类型 * const 指针变量=变量名(或取地址); const int * const p ; 4、数组名 指针和数组名在本质上是不同的, 1,指针是地址变量,而数组名是地址常量 数组名本质上是一个 地址常量 ,不是指针,不管是指针常量还是常量指针都不是,之所以在实际编程中,数组名表现出“是”指针的样子,那是因为经过隐式转换形成的,而不是数组名本身具有的 指针与地址的区别:   1、指针和地址最大的区别就是指针是有类型的,地址是没有类型的。我们当然可以通过绝对地址的方式找到函数和数据,但是地址是没有类型的,不能对地址进行算术操作,在涉及诸如数组等操作时就不能通过地址的自增和自减来访问数组的各个变量。   2、指针是由地址和类型两部分构成的

实验报告(2019年6月12日)

拜拜、爱过 提交于 2020-01-29 04:54:17
c程序实验报告 姓名:黄志乾 实验地点:教学楼514教室 实验时间:4月30日 实验项目: 1、指针基础及指针运算 2、数据交换 3、输出指定行数的杨辉三角形 4、数组元素奇偶排列 一、实验目的与要求 1.指针基础及指针运算 ● 本实验旨在及爱情学生对指针数据类型的理解,熟悉指针的定义、通过指针间接访问变量 2.数据交换 ● 本实验旨在加强学生对指针类型作为函数参数传递的理解,通常将实参传递给形参时,有两种方式,即按值传递和按地址传递,其中指针类型参数即是按地址。 实验要求: ● 定义两个函数,分别为void swap1(int a ,int b)和void swawp2(int a,int b),用于交换a,b的值。 ● 从主函数中分别输入两个整型变量a、b ●从主函数中分别调用上述两个交换函数,并打印输出交换后a、b的结果 3.字符串翻转及字符串连接 ● 本实验旨在加强学生对字符指针以及将指针作为函数的返回类型的理解,并通过指针对字符串进行操作,通常来说,一个字符串在内存中是连续存放的,起开始地址为指向该字符串的指针值,字符串均以'\0'作为结束字符 实验要求 ●定义两个字符指针,通过gets()函数输入两个字符串 ●定义一个函数char reverse(char str),通过指针移动方式将字符串反转 ●定义一个函数char link(char str1,char *str2