首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

移动数组,记得带上指针

在学C语言的你,是否觉得指针简单呢,其实在一开始学习C语言的时候,小编也逛过许多论坛,看到写得最多的也是各种对指针的吐槽,直到前几天看了一次关于C++的直播,才发现指针真的没有大家说得那么难。...怎么说呢,指针简单来说也就是可以保存地址值的变量称为指针变量,因为指针变量中保存的是地址值,故可以把指针变量形象地比喻成地址箱。...然后...为了增加难度,老师觉得学到后面就越来越有意思了,嗯嗯,那就随便把数据结构给你们先尝尝鲜呗,这一尝鲜...广大学生表示难啊,顿时对指针产生了怀疑 ? ? ? 。...嘿嘿,故事就此打住,下面进入刷题模式: 任务描述 题目描述:有n个整数,要求你编写一个函数使其向右循环移动m个位置 编程要求 输入 输入n m表示有n个整数,移动m位 输出 输出移动后的数组

56940
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    优先算法 —— 双指针系列 - 移动零

    移动零 题目链接: 283. 移动零 - 力扣(LeetCode) https://leetcode.cn/problems/move-zeroes/description/ 2....算法原理 其实像移动零这种类型的题目都有一个名字叫做数组划分(数组分块),就是说先给一个数组,然后再制定一个标准/规则,在这个标准/规则下将这个数组划分为诺干个区间 而在我们移动零这道题目里面就是先给一个数组...,然后根据规则划分为两个区间 而解决这种类型的题目我们一般就是使用双指针算法来解决,在数组中,我们是利用数组的下标来充当指针的 我们先定义两个指针:dest:目的地...cur:当前的 两个指针的作用dest在已经处理的区间内,非0元素的最后一个位置cur从左往右遍历数组 那么我们就会划分为三个区间: [0,dest]表示已经处理过的区间,表示非0...元素[dest+1,cur-1]全部都是0[cur,n-1]待处理的元素 当cur指针到达n位置的时候时候,那就说明cur已经从左往右把数组遍历一遍,那么我们这个区间就已经划分好了 当

    8310

    你必须知道的指针基础-3.指针的移动及指针的危险

    一、指针的移动 1.1 指针的向前及向后移动   指针每次加一就是指针向前移动指针类型对应的字节数。下面通过一个int指针来指向一个int数组,看看指针的加法运算到底是个什么鬼?...可以看出,减法即代表向后移动指针类型对应的字节数。...1.2 char类型指针的移动   对于char类型的指针移动,实际就是指向下一个字符或上一个字符: char s1[]="hello edisonchou.cn"; char* p=s1...2.2 内存访问越界   继续上面的例子,我们此时再将p指针向后移动,看看此时p指针所指向的内容的值是多少?当我们再把p指针向后移动99999位时,其所指向的内容的值又是多少?...想想,当A程序中的指针通过移动取得了B程序中的内存地址或数据内容,再对指针对其修改数据,这是一件不安全的事儿!

    1.1K20

    【LeetCode刷题】:双指针篇(移动零、复写零)

    一、移动零 1. 题目解析 题目:移动零【点击跳转题目】 大致题意就是将数组中所有为0的元素往后移,移到数组的末尾,但是所有的非零元素的顺序不能发生改变。例如:假设非零元素是1,2,3,4。...那么移动完后的顺序依旧是1,2,3,4。 另外还有一个要求:那就是移动操作是要在原数组上进行操作,不能复制数组进行操作。 2....解决这类题一般有一个经典的算法,那就是 《双指针算法》。这里的指针并非是真的指针,数组中我们通常使用下标来充当指针。 定义两个指针cur和dest: cur:从左往右扫描数组,遍历数组。...第一步:定义两个 “指针” cur和dest。...cur的值为0,将dest的值修改为cur的值后,dest向前移动一位,然后再将dest指向的值修改为0,最后cur和dest向前移动一位。知道cur小于0结束。

    6510

    双指针算法解决 移动零 和 复写零问题

    一、移动零 题目链接:传送门 题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 注意要求: 必须在不复制数组的情况下原地对数组进行操作。...,思路如下: 首先,虽然叫"双指针",但不一定非要是两个指针,这只是一种形象的说法,比如此题是数组,可以用两个整形变量作为下标....创建一个"指针"cur,使其指向数组中第一个出现的0的位置.(如果数组中没有0,则直接返回)....我们这样操作可以将0都夹在cur和dest两个指针之间,最后dest指向最后,则0就全到数组最后面了....创建一个"指针"cur和一个"指针"dest. cur指向最后一个需要复写的元素,dest指向复写后最后元素的位置. 那么如何找到这两个位置呢? 很简单,模拟一下复写过程即可.

    16320

    指针+数组指针+字符指针+指针数组

    指针 指针作为C语言的核心部分,相比较其他的内容相对比较难懂一下,应用的方式多样,变化较多,导致很多的同学非常苦恼,那么接下来,我将陪你来共同揭开指针的神秘面纱; 指针的含义 大家不要把指针想的太难,指针其实就是通过地址找到对应的变量的位置...,然后我们可以对地址进行解引用来访问变量的内存,来获取值的一种间接方法;我们通常说指针指向哪里哪里,就是指针变量里面存的其他变量(或者常量)的地址;即  指针->地址->内存; 普通变量指针 首先,我们现来看看指针的构成以及表达形式...(这里的+1是将地址向后移动一位)数组名的地址+1后,我们发现增加了4个字节也就是一个整形的大小,而此时确实是指向了数组内第二个元素的地址,步长是一个元素类型所占字节数,也就是指向了下一个元素; 2.我们看后面两行...,对数组名取地址+1的地址增加了'\x14'(地址是用16进制表示的),转化为10进制就是4+1x16=20个字节,而20个字节正好是整个数组所占的大小;说明移动后超出了数组,也就造成了数组越界。...字符指针 含义 字符指针就是指针指向了字符或者字符串,因为字符串可以看成是一个字符数组,所以字符串指针与数组指针大致可以类比; 字符指针打印字符串 这里我使用了三种打印字符串的方式,从结果上看,很明显打出来的字符串都是相同的

    7510

    每日一练:【优先算法】双指针之移动零(easy)

    双指针概念介绍 常见的双指针有两种形式,一种是对撞指针,一种是左右指针。 对撞指针:一般用于顺序结构中,也称左右指针。 • 对撞指针从两端向中间移动。...) 快慢指针:又称为龟兔赛跑算法 其基本思想就是使用两个移动速度不同的指针在数组或链表等序列结构上移动。...快慢指针的实现方式有很多种,最常用的一种就是: • 在一次循环中,每次让慢的指针向后移动一位,而快的指针往后移动两位,实现一快一慢。...移动零 题目分析: 本题我们需要将非零元素移动到数组前面,并且保持相对位置不变,非零元素的之后都是0,0不要求相对顺序不变,,根据题目条件限制,不能复制数组,意味着算法的空间复杂度为0。...因此这里我们使用双指针的方法。 由于需要保持非0数的相对顺序,这就意味着算法需要具有一定的稳定性,如果双指针是对向移动,那么数字的相对顺序就会改变。因此指针一定是同向移动的。

    7200

    CCPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针

    普通变量和指针变量 共性 PS: 可见这4个函数的汇编指令完全一致,无论是什么类型的指针变量,对指针变量的读写跟普通变量没有任何区别,所谓的指向只是描述指针变量的值时多少而已,就读写而言,指针变量跟普通变量没有任何区别...空指针和野指针 野指针:定义了一个指针变量,如果没有进行初始化,系统就会有可能随机赋值一个地址给这个指针变量,也就是说,这个指向指向一个未知的区域。...空指针:空指针不是指向常数0,只指向地址0,即NULL,其实换句话说,指针的本质就是地址嘛,空指针就是指针本身的值(地址)为0空指针的作用是防止野指针的出现,因为我们不能知道野指针到底指向哪里,所以我们也无法判断一个指针是否是野指针...指针变量的+-运算 指针变量的加减运算:也就是做地址偏移,不同 的指针类型偏移的步长不同。...图片 图片 PS: 区分指针数组int *a[3]和数组指针int (*a)[3],前者时存放指针的数组,后者是指向数组的指针。

    1.7K30

    CCPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针

    普通变量和指针变量 共性 PS: 可见这4个函数的汇编指令完全一致,无论是什么类型的指针变量,对指针变量的读写跟普通变量没有任何区别,所谓的指向只是描述指针变量的值时多少而已,就读写而言,指针变量跟普通变量没有任何区别...空指针和野指针 野指针:定义了一个指针变量,如果没有进行初始化,系统就会有可能随机赋值一个地址给这个指针变量,也就是说,这个指向指向一个未知的区域。...空指针:空指针不是指向常数0,只指向地址0,即NULL,其实换句话说,指针的本质就是地址嘛,空指针就是指针本身的值(地址)为0空指针的作用是防止野指针的出现,因为我们不能知道野指针到底指向哪里,所以我们也无法判断一个指针是否是野指针...PS: 区分指针数组int *a[3]和数组指针int (*a)[3],前者时存放指针的数组,后者是指向数组的指针。...这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。

    1.7K20

    指针进阶(1)(字符指针,指针数组,数组指针,函数指针)

    前言: 本文主要讲解指针进阶部分的内容,分为字符指针,指针数组,数组指针,函数指针。...int *arr[5];//存放整型地址的指针数组 char *arr[6];//存放字符类型的指针数组 数组指针 概念辨析 我们类比一下: 整型指针:指向整型变量的指针,存放整型变量的地址的指针。...数组指针:指向数组的指针,存放数组地址的指针。...形式辨析 int * p; 首先*表示这是一个指针,命名为p,然后指向的是int类型的指针,数组指针也一样 int(*p) [5]; 上面的形式就是数组指针,我们需要先用()把*和指针名括起来,然后剩下的就是指针指向的类型...数组接受时,行可以省略,但是列不能 指针接收,必须用数组指针来接收。 函数指针 函数指针就是指向函数的指针。

    11110
    领券