在 costs 里边他就支持指针数据类型,那指针指针声音的格式是这种,就一个标识符冒号, 后边是 tom to 一个数据类型,或者也可以指向一个功能块程序,甚至一个函数都是可以的。这个指针指针在使用的时候,你比如说给指针 负一个值,那实际上该指针负值是负一个地值,那在 toutices 里边取一个变量的一个地址,是用这个这个函数 ab 二的地址,那取这个指针指针指向地址的内容就是在这个指针后边加一个向上的一个箭头,这个这个字符表示取这个指针的内容。那在除了上边的 数据类型之外的 costs 里边,也可以自定义一些数据类型,那添加的添加的方法,在你左头的这个设备数上,然后找到 ipk 是那个节点,然后右键通过他的快捷菜单添加对象, 找到这个 d o t, 这个 d o t 是什么意思呢?是它是 data u e 是泰的数据单元类型 这个的一个缩写,那这个 dot 呢?包括这几种结构,美女别名联合。你看这几种写写过程序的,你用过四语言或者什么其他的语言来说,对对这几种东西都不陌生。 定一个结构体验,第一个媒体认定一个联合,应该都不陌生。
粉丝754获赞2009

各位同学,我们再来看一下指针变量的声明,指针变量声明的格式是类型名,这里加一个星号,后面跟上指针变量的名字,以分号结束,这是对它的声明的格式。例如 这是一个整形的变量案,这种就是说明一个指针变量信号 p, 信号 p, 那这种办法说明也是可以的,就是说明一个整形变量的同时,我还申请一个整形的指针变量 p, 也没问题。 这种声明方法呢,是说明一个普通变量 i 声明指针变量 p, 又声明的一个指针变量 q, 指针变量扣。这里 需要提醒一下,就是如果你要申请声明,两个指针变量分别加上型号,这个型号是我们格式中所规定的。如果是这样一种声明方法,朋友们看一下型号 p, 逗号 q, 朋友们,这两个声明等价吗? 等价吗?我们说不等价, 十不等价的。那这里面世界申请了两个普通的整形变量二和 q, 只申请了一个指针变量 p, 那就是每一个指针变量 在写的时候都要给他加上信号这个符号都要加上信号这个符号,这是对指纹变量声明的一般格式。 指针变量也是有类型的,我们说,我们说呀,他的类型并不是指指针变量本身的类型,那我们知道指针变量里面所放的一定是地址,那么这个地址难道还有不同类型吗?我们说地址的类型肯定是一样的, 那这里所致的类型是什么呢?他指的是呀,就说这种量他能够指向的变量的数据类型, 数学类型来整形的 i 信号 p, 单金型的 c 型号 qq 啊,那为什么说这个指针变量也有类型概念呢?它的意思是说这个 p 只能 指向 i 锁这样的单元,那 p 能不能指向 c 这样的单元呢?是不可以的,因为 c 的类型是 float, 类型不一样,不一样是这样一种意思, 这个类型指的是他能够指向什么类型的变量啊?是这个意思啊,意思指着变量自身所占的内存空间大小,与他所指向的变量类型是没有关系的, 因为指针变量刺身他放的是什么?朋友们,放的是一个地址的编号, 同一台计算机,它内存空间的编号的大小肯定是一样的,第一个单元和最后一个单元它的大小是一样的,所以与它所指向变量类型本身是没有关系。朋友们要记住这一 点啊!这点说的类型主要是说他能指向什么类型的变量,不同类型指针变量所占的内存空间大小是相同的。这里说的就说一个 整形的变量 q, 一个单金型的指针变量 p。 同学们,那么在内层当中, p 和秋啊,他也是要占空间的,虽然他们两个类型不同,但他们两个所占的空间空间大小相同。 相同为什么?因为他们两个里面所放的都是内存的编号,同一个计算机的内存编号大小是相同。这一点给同学们呀!再次提醒一下 指针变量,我们要提醒指针变量啊,和一个特定的变量进行关离以后,再可以去使用它。 所以对于指针变量,我们一定要对他复职,如果不复职的话,这个指针变量就失去了他的意义了。这里复制的目的就是笑,让他去指向某一个具体的变量,比如说整形的 i 等于九百一十一,一个指针变量 p, 那接下来我做一个复制语句,就是 p 等于 n 的爱,那就是 爱的值是九百一十一。我在申请了一个指针变量 p, p 做了这条语句以后,就意味着 p 是指向这个单元的,那 p 的值就是谁,就是按的 i, 如果通过程序 输出的话,我们是知道爱的地址是多少的,是多少的啊,这就叫对指针变量做一个复制,复制他的示意图,这里也画出来了啊,同学们再看一下,这是声明两个量, 说明两个量,一个是二,一个是 p, 同时给他抽的是九幺幺。做完这条语句以后,做完这条语句以后,那么 屁就有直了,同时这个箭头指的是诗意图,指的就是诗意图啊,那屁就指上了爱这个锁指定的空间。 对于指针变量的复值,我们可以看一下,这里是讲过的,那接下来 p 也可以等于零, p 也可以等于浪,这两个是等价的,等价的要提醒一下,在指针这一章当中, 我们会见到大量的浪,这个是系统中已经预定好的,预定好了啊,提前预定好的,他代表的意思就是零, 也就是空,也就是空啊空。所以写浪的地方,如果直接写零,就这条语句和 p 等于零是等价的,朋友们写哪一条都是可以的啊,可以的,这里写法也没有问题, 这种想法也可以,那这种想法是什么呢?是把这个量取这个量的地址进行的一个类型转换,在第二当中啊,有个类型转换, 就转换成一个指针,然后把他的地址地址啊存到我们指针并的 p 当中去也是可以的。 只是这种用法相对来说是比较少的,因为一千七百三十二,他是一个长量,一个长量。啊,长量,长量,我们一般不去考虑他的地址的这样一个概念,所以要注意一下,那这里面实际上是把这个长量变成一个地址,地址是一千七百三十二,是这个概念, 那 p 也就是直接到内层中直接定位到这个内层空间十斤至为一千七百三十二的位置去了,这是一种对内层直接定位的方法。啊,直接定位。

程序编写的部分, prc 的程序通常是包含上下两个部分,你这个图,这是一个函数,其他的程序啊,功能块都跟那个差不多,他会有上下两个部分,然后上边是变量升级区,然后下边是你的程序编辑区。 通常编写一个程序的话,需要声明相应的变量,然后去编写程序,这个是我们这变量声明的一个格式,前面是你这你起的这个变量的名称,然后冒号变量的一个类型, 然后后边这一部分是可选的,你要根据你需要不需要指定出纸,如果需要那就是冒号,等一会,然后写你的出纸。嗯,你具体写法就是下边这种, 比如说这个,嗯, past, 然后冒火星,那要是给他付一个初始知识处的话,这么去写, 那这种的变量呢?叫做这个普通变量,普通变量就是一般用于我们程序内部去使用的一些变量,他是不对应到输输出上边去的。

大家好,我们今天继续讲解入门篇第九章指针机引用的学习。我们今天要讲的是引用和指针的定义。 在讲这两个参数变量之前,我们先看一个 in out 变量和引用的这么一个关系, 就是我们在一个功能块 f b test, 我们定义了一个 in out 变量,然后我们同时又定义了一个 if c y, 这是一个 reference 引用型的一个变量,这两个变量同时都是 数据类型,都是这个 f b c y 这个气缸的功能块。那当我们登录到控制器以后,你会发现我们定义的这个音 out 变成 f b c y, 他其实就会 会变成这个 reference, 那么就得出第一个结论,就是 in out 变量其实就是一个引用的类型, 那第二个指针本身就是一个地址,引用本身是一个特定类型的收集类型, 从当前这个公路看,我们可以看到一个叫 if c y, 那 if c y 它就是一个 reference to 这么一个气缸功能块的这么一个特定的数据变量,那么那个 p c y, 它是一个 point to, 它是一个指针型的变量, 那 pcy 的值,它是一个指针,它是有个值的,是指向了这个气缸实力的这么一个地址,那就 pcy 这个指针变量本身而言,它其实就是一个地址, 我们是没有办法通过 p c y 去操作这个旗杆功能快的,但是应应变呢,是可以, 当然了我们可以使用。就是第四点是讲这个指针调用实力的时候,需要这个符号,三角号也是可以操作指向实力的这个内部的这些变量。 像我们把当前这功能块打开,点到 f b test 这边 in out 变量,这个指针变量 point to f b c y, 这是一个引用型的变量,像我们直接登录上这个控制器, 登录控制器以后,我们发现这 f b c y 它其实就是一个 reference, 那 if c y 其实它也是一个 reference, 我们在 没还说这边实力化了这个 f b test, 而且对他三个接口都复制了同样的这么一个实力,就是这个气缸的实力, 气缸实力是 f b c y e, 然后分别复制给 f b test 功能快的三个接口。 可以看到第一个我们所说的这个婴儿边就是一个 reference, 我们双击点开这个 test, 它其实就是个 reference, 这是一个应用指针,边上本身是一个地址,那 p c y 它就是一个地址, 监控时可见内部变量,引用不可见,什么意思呢?就是说你看我这个 p c y, 我指向了这个地址,我前面有个三角号,我一点开就出现这个, 这个地址指向的真实的这么一个数据就在这里,他有个三角号就可以取真实数据的这么一个,再点开这三角号,可以看到我指向的当前的这个功能块所有的这么一个 状态都是可以看到的。但是这个 ifcy 它是一个 reference, 这么一个引用型的这么一个这么一个变量,他没有办法去看到内部。 但其实在当前的这么一个程序在就是 r f c y 在背负的春开了三的这个环境里面是可以看到的。下面我们比如说把这三个还有这一个复制一下, 把原来这个军开的三里面东西全部删掉,右键直接粘贴,直接登录, 从这里可以看到就是春开的三和 ctrl c, 它们的底色都是一样的,也就是说我所有的 功能快直接粘过来啊,直接运行就可以了。我们双击打开这 f p test, 在这里我们可以看到这个 r f c y, 它前面也是有个加号的,那点开以后就可以看到所有的你的内部成员,这个 p c y 它也是可以 看到。如果 pc 弯要点两次,那 i c 弯就点一次就可以了,也就是说这个 refer reference 这个变量在背负的推开的三 里面会更方便,毕竟在 ctrl c 里面,我认为是没有办法去点开这个 r f 的。 比如说这 f 内部指向的这个实力是什么?我们应该怎么查看呢?你首先要必须知道啊,你是指向他的,你只能来到这个 man 函数这边啊,直接这样点开这个里面才能看到里面这个状态,那既然你这个 c y a 已经复制给了 r f, 其实 r f 里面的状态跟它是一样的,但是我们没有办法这个 test 里面去做一个这么一个操作。 我们继续再看功能块,这个 f b test 内部有两个功能块,就是内部有两个指针型的变量,一个是 f b point, 一个是 r f point 就是它都是之前一个 word。 那第一个 f b point 呢?它是把 f b in out 这个变量的指针取过来, a d r 就是取这个变量的 地址的意思,那这个 point i f 就是把这个 input i f c y 的地址取过来。 由于我们在咩函数调用的时候,我们知道这个 f b c y 跟这个 if c y 指向的都是同样的实力,那理论上来讲,这两个指针的数据应该是一样的, 那以及我们外部也做了一个 pony 功能块,直接把这个十一的地址取出来放给他,我们再观察一下这三个指针型的变量,你看这个字 幺五三八幺八五零,我们点开 test 看一下内部幺五三八幺八五零,以及这个 p c p c y, 它也是幺五三八幺八五零,但是这个 p c y 它指向的是一个 功能块,那么下面这两种指针类型,它指向是一个 word, 那我们把这个 word 点开,它其实就是一个 word。 虽然他们的这个啊,这里要就是有一个问题会比较搞混, 就是我这三个指针我都指向同样一个地址,为什么我把这个指针点开,他不一样?但就是因为我们在定义这个 point 的时候,你需要也给他一个 类型,如果你这个指向的类型是一个整数,那么这个值他取三,用一个取三角号, 用这个三角号来去获取的就是你指向的这个数据,它就是个 word。 你比如说我可以把 if 它 等于零,这样写是没有问题的,那么光标放到这里来,它吸取这个 world, 我们编一下。 但如果你这样去写,比如说啊,还是同样的一个操作,比如说 if c y 取地址, 然后等于零,它就会报错。因为你 p c y 加上这个三角组合起来,它的数据类型其实是以 f b 杠 c y, f b 杠 c y 跟等于零,它是没有办法进行比较的, 一个功能快,怎么能等于零呢?所以这个判断的逻辑就是有问题的。你这个时候如果我点一下,比如说 w i 这样子我们再编一下,那他就不会爆错, 这里会需要说就说明的这个问题,就是虽然我指向的指针都是一样的,但是我指针本身的数据类型是不一样的,那么对于这个指 指针的操作他也会不一样。我们继续看一下。这个 刚讲完。第三个就是监控的时候引用不可见,但是背负着 ten cat 三的环境是可见的。第四个就是实力需要符号引用不必。 什么意思呢?就是我们在调用 p c y 内部的成员变量的时候,我们需要加这个三角号,那当我们使用这个引用去调用的时候, if if c y 的时候,我们是不需要这个三角号的, if 它等于零,在这样就可以了,我们直接登录它 程序是不会报错的。程序是不会报错的的原因是因为我们在 man 函数里面对它都进行了一个复制,你比如说 我只对 in out 型的变量做一个复制,因为这种类型的变量你不复制它变异就会报错,所以必须要复制。那这个时候我们直接在登录这功能看会不会报错呢?不会报错, 因为什么呢?因为我们是属于一个在线的,在线的一个更新,这个 f b test 里面的 if d y 或者是这个 p c y, 它的值都已经被负过了,那如果我们直接热负为 再启动会不会报错?我们再看一下,那直接会报错, 这个 p c y 没有在 man 函数中对这个 p c y 进行一个复制,然然后你在功能框内部直接就取这个地址,那他就报错了。那在这里我们需要做一个判断,怎么写呢?就 if 对于指针做一个判断, a 五 p c i 不等于零,不等于零,它就是指针有效 再做一个判断。那如果对于引用呢?比如说引用这个 r f, 如果我们也没有对它进行复制的话,它其 其实也是会报错的啊。在这里对于引用是否有效的一个判定的,一个有一个运算服务叫两个下划线,你看 is valid reforest, 就是是否是有效的引用, 那把这 i f c y 写到这个里面,像那一个函数一样, then 如果 i f c y 有效的话,那这个返回词就是 true, 也就是说 ifcy 有效,我就执行里面的,如果它无效,我就不执行,不执行它。你只要没有去对 if 做一个读写的操作,不要触发这个 未复制的引用,那么这个功能快也是不会报错的。再次登录这个,这是我们选择完完整下载,因为当前指针已经一出起,你的 prc 已经就死机了, 他已经没有办法进行复位了,只能断电重启。那这个时候我们在运行这个,发现这个虽然是个问号啊,问号就是这个指针没有被复制,那他也当前 plc 一直在跑,并没有被报错。 我们说了说了这个指针跟引用就是大概有有这些个问题,就是按一压的本身就是一个 reference。 指针和引用最大的一个区别就是引用,对于比如说这个气缸 的成员变量的时候,指针需要这个三角号,那也用不必,这是一个最大的一个区别。那我们在实际用这个的时候,比较经典的一些使用的一个场景,我们可以说一下, 比如说我们在这定义了一个轴轴的功能块,轴的功能块里面有有写的就 be trigg, 有状态显示的,比如实际位置速度,那对于这个边上来讲, 假设我这个 be fb test, 他可能他就是一个轴的操作功能块。我们一般情况下对于一个成年变量又读又学,我们就是从基础语法就会知道,我们需要把它定义成音要的形的这么一个变量, 比如说我们定在这里 stax, 那在功能框内部就可以对它进行一个操作,但是这个操作比较讨厌的是什么呢? 你先把这个注视掉,就是说我这个 f b test 的功能快,我想要去我们把这 f b test 也给它改一下,比如说这是一个轴的功能快, 这就是一个轴的功能款,然后我们定义的这根轴角就叫 x a, 我想知道 x a 的它这个轴的引用里面的当前的位 怎么怎么样?在程序里边,程序里面要做一个判断,比如说 if, 我用它等等于二十,然后我想做一件事情,我们编一下,他就会报错, 它就会报错。而且这个时候我们把这个结构体的变量放在 in out 里面,就意味着怎么样呢?我们需要还搞一个全局变量, 然后这边再做一个类似于 s t x a 的状态 st 杠 a x, 然后还要把这个 x 这个玩意儿 x a 叫 f b c y, 这个先不管它 f b c y e, 然后 s t 这个东西等于 x a s t x a 调用这个功能框,我们要这样去写,然后使用的时候这边还不能直接引用这个功能框内部的, 然后还必须要怎么做呢? 你再复习一下, 还要这个样子写, s t x a, 还要这样去写,但是大部分时候我们有时候可能是这样做的, 我们有很多种, 我们有很多轴, a, x, i s, 那这个是这是一个数组, a r r 中括号零零,比如说失根轴 of, 那在使用的时候我们可能是这样写的,中国号零的给过来, 那这边把这个删掉。我们在引用的时候,我们想知道 x 轴的,因为这个零号复制了个 x 嘛,我们想知道 x 轴的当前位置,你还要这样去写, 就是非常的麻烦。那我们这种使用场景的话,我们换一种操作思路,把这个放到哪里?放到这边来,而且把它变成 reformance 这个样子。我们在全区变量里面还是做了一个数组, 在调用的时候把这个数字给过来,这个时候直接变异,我们发现第五行已经不再报错, 就是说我在调用这个 x a 功能快了,比如说我在定一个 y a, the y a 十一号, 我想使用哪个功能快,比如说 y a 的功能快,然后我就直接用点去获取内部的这个 s t x s, 然后再点这个这样的这样的一个写法就非常 非常明确。那不像在使用全局变量的时候,零号到底是对应哪个组,一号到底是对应哪个组?就是你要你要记住,否则写出一个标号就可能会搞出一些问题。 那像这个 reference, reference 这个引用型的这么一个 比较常用的一个使用的一个场景,就是刚刚所讲的这么一个状态,那有关这个指针的一个应用,指针以及引用的一个应用,其实大部分时候我们是能不用就不用, 比如说像刚刚的这种问题,我在下面我使用了这个引用等于二十,那比如说如果我编程我这样去写, 我放在上面去,他就会报错,因为什么呢?因为当我们只有少过第七行,少过第八行的时候,这个应用他才有值, 你从第三号你就开始用,这显然就会报错。我们现在登录一下,我们看一看,直接在线修改, 在线修改直接就保存, 所以我们必须要对这个指针就相当的熟悉,你要其实就是一点,先复制再使用,如果你不确定他有没有被复制,那你只能怎么办呢? 做判定,那最简单就做判定, if is 这样基本上就是万无一失,不会有问题。 有关指针和引用的这么一个关系,我们今天就讲到这里,因为这个指针的应用 太灵活了,可能需要一个具体任务的一个需求,可能才会展现出他实际的一个威力。那我们今天的课就讲到这里。

那第二种呢就是直接变量的声音,那这个直接变量呢,就是这个变量要关联到我们的输输出或者是每寸区域上边去,比如说关联到你的 io 上边去, 那这个变量发生改变的时候,对应的 io 也会跟着改变,那这种变量的声明呢,是比前边的那个变量会多了。这一部分就是艾特这一部分,在这个变量标识符后边加上艾特一个地址,那这这一块的艾特后边的这个地址呢?实际上他分这么几个部分, 第一个是有个百分号,后边跟一个字符,然后这个这个字符呢有三种选择,分别是 i、 q 和 m, i 呢代表输入区, q 呢代表输出区, m 代表是输入区。然后再往后呢是一个类型 的一个标识字符,有这几种选择,分别是 x、 b、 w、 d 和 l。 然后再往后呢我是一个数字,表示你具体的这个地址, 那这个零二一这个变量,它应是在这个百分之十 id 四十八这个低值上,所以加后边的这几个类型字符, x 呢表示是一个倍, 对应的数据类型呢就是 book 型的。然后这个大写字母 b 呢代表的这个类型是自己啊,然后 w 呢是个字, d 是双字,然后这个 eller 呢是 long word 长字。靠在这次里边,就后边的这一部分,这个表示地址的这个 数字,那这个是我们需要注意一下的,有些跟西门子的应该是有明显不同的按字节的, 这是比如说第一百九十二个字节,一百九十三,一百九十四,一百九十五,然后然后你比如说映射到这个这个地址下边,然后你定义了一个这个, 自己也想了一个一个数,然后写这个地址的时候呢,就是百分号 ib 就啊一百九十二。如果你还是从这个地址开始,但是你定义的是一个 word 型,那那这个时候我们的这个地址就是 iw 九十六, 应该是这个 i b 这个 bat 型的,这个这个数除以二一个 word 是两个字节,这个 d word 的也是同样还是从这个从这个位置开始的,他的数就是四十八。


大家好,我们今天来介绍一下引用和指针的用法,那引用和指针他也是一种数据类型,就是就像我们通常定义其他的标准类型,或者是自定义的这种结构体的这种数据类型一样, 那指针的关键就是 point, 那引用的关键就是 reference。 下面我们开一个程序, 我们这边预先准备了一个叫 f b test 这么一个 function blog, 一个功能快 功能块里面,在 input 变量,我们定义了一个 p c y, 定义指针的话,它这个关键的就是 point two 后面加上一个数据类型,那跟我们正常,比如说定义指 定一个呃 ant 型的这个变量不一样,我们直接把这个数据变量放在后面就可以。对于 ict, 我们知道 ant 型它是一个两个字节十六位的这么一个有符号的一个整数, 那对于 pcy 它的定义是一个 point 处。那么这个指针型的变量,它其实跟 inter 型或者是其他浮点数的数据类型一样,它也是有一定的空间的一个占用 啊。看到我们第五条就指针或引用本身占用的字节是可阅的,根据你的那个 run time 这个系统,比如说我们使用会穿 a m 系列或者是合穿 q 系列呢,它这个 p r c 内部的一个 run time 是三十二位的,那此刻我的 p c y 这个变量,它的占用字节呢?就是 四个字节,我们 i c n t 获取一个变量的一个所占字节空间的一个大小,我们使用这个 size of, 那 p c y。 一会我们把成语跑起来,可以看一看这个指针占用了几个字节,那同样我们可以再定 i c n t i f, 在这边把引用型的变量类型我们也做一个计算, 那再再回头再讲这么一个 point, 就是指针 reference, 就是引用和我们一般定义其他的标准类型的变量是一样的,就是前方一定要加上这个关键字 point 或者怎么样, 那默认 pcy 指针一用都是占四个字节,在三十二位系统内,如在六十四位的操作系统,它是占要占八个字节。然后我们再看 in out 变量的本就是 reference 这个我们一会儿登录到这个控制器检查第二条, 我们先看第六点指针或引用指向这个边梁类型很重要。 这句话是什么意思呢?就是说像第七行,我定义了一个 p c y, 它指向的是一个气缸的操作类型,它或者是指向了一个很大很大的一个功能块,或者是指向了一个很长很长的数组,比如说我们可以定一个, 比如说 p e, 那这个是它是指向了一个什么呢?指向了一个数组,它可以指向你系统定义的任意的,比如说我可能九九九一万个, 比如说 up long, real 双辅点数,八个字节,一万个,不就是八千个字节的这么一个数组变量,那 p 指向这个东西到 p 占了多少自己?他就是占用四个字形,因为 p 一跟我们后面的这个变量长的一个数组变量也好,或者一个功能快也好, 就是说 p 只是一个指针,它是不存在这个实体变量的。 我们这个实体店呢,必须用我们其他的相关的运算,把一个真实意义上的一个实体的一个值付给这个指针,这个指针才可以操作,就像我们在这个接口对应了音 out, 我们又定义了这个 input, 这边有个 p c y i f c y, 这是一个指针,这是个引用,那这个 p e 我们先暂时把它注视掉,这边作为局部变量,我们把它放 下面,这个接口有三个地方,我们需要对这三个变量在调实力化这个功能快运调用这个功能快的时候需要对他进行复制,这个时候就必须要有一个真实意义上的一个实力。 我们在面向上面看,对于 f b c y 来讲,我们定义的一个真实的实例叫 f b c y, 下面我们把这个 f b test 这个功能块,它里面有几个接口,第一个接口音 out 型 f b c y f b c y。 我们对音二的变态进行负值的话,直接把我们的实力冒号等于给过来就可以了。下面我们对这个 reference c y, 对这个引用进行负值的时候,也是冒 二号,等于 f b c y, 我们把这个同样的一个实力可以给到多个引用或者是指引。 最后一个就是指针型的 p c y, 但对这个指针变量进行负责的时候,我们就不可以直接等于冒号了,需要用一个取地址, a d r, 把这 a d 啊,把 f b c y 的地址取出来,然后再传给 p c y, 这就是指针和引用在调用负值的时候一个比较大的一个区别。 在此刻我们可以看到一点,就是 in out 型的变量的复制和 reference 变量的复制都直接使用冒号等于,然后把实力直接 附近附近来就可以了。所以我们再再总结一下我们刚刚讲的一些东西,第一个尺寸的一个定义,使用一个关键字指向一个数据类型,这个数据类型跟你标准的数据类型 这种自定义的数据类型,比如说媒体结构体数组功能快,他都可都是可以指向的。 reference 定义类,类似就是纸质工艺这么一个引用, 如何去定义?然后如何去复制?那下面我们现在一个问题就是如何去使用它。你再看到 ppt 这边,实力引用的时候,指针需要加上运转符,就是这个三角号, 就是我们一二三四五六六,按住 shift 六上面的一个小符号三角号,然后我们看一看在这个功能框里面,比如说我希望 把这个指针类型 p c y 这个气缸公众号里面,它有一个什么呢?它里面有一个 u i alarm 这么一个,呃,报警的一个 u i n t 的一个数据类型, 我们想使使用一下,我们怎么去写?就是 if, 比如说 if p c y, 嗯,这是一个指针型的变量,对于指针型变量了一个实力引用的时候, p c y 这个指针我要使用它指向那个时 力叫实力引用,要加上这个三角号,然后你这个时候再点一下,那么我指向的数据类型的这个所有的变量,这个如果是个功能快,那功能快内部所有的东西啊都会显示在这里,他等于零,然后就可以了。 做什么操作我们先不管,下面我们再看看另外一个叫 f b point, 我们在第一行对这个 f b point 也是把这个 f b c y, f b c y 的,这是一个音 out 一个变量,那这个值, 我们是在命函数这边把这个第六行的 c y 一付给了他,也就是说功能块 f b c y 里面的这么一个实力给我们外部那个 是一样的。这个时候我们用 adr 取地址,把 fb 公文块里面的这个地址取出来,就相当于把外部的那个实力取出来,因为 fbcy 他其实就是一个 reference, 这么一个东西,他是没有实力的,他也是一个引用一个指针而已,我把这个指针取出来,就是实际取的这个结果就是 f b c y e 的地址。 在这里所说的想讲的一个问题就是我们现在是把 f b point, 但是这个指针它是指向了一个 world, 我这个 f p point 的一个地址跟这个 p c y 是一模一样的,那我是不是可 可以像 pcy 一样也获取到这个气缸功能块的那个一些成员变量呢?我们写一下,哎,比如 fb point, 我打一个新号三角号,再点一下,发现他点不出任何东西。 在这里就牵扯到对指针实力操作时候一个比较重要的概念,就是说 你指向指向什么样的数据类型,那么你加上这个心以后,这一个整体所表达的一个实力,就是你指向这个数据类型, 也就是说它其实是一个 word 型的变量。那这个 p c y 信号,它的类型就是一个 f b c y 一个功能块,所以我们实力使用的时候,将 加上这个三角号,它的数据类型直接取决于你指向这个数据类型,所以 point two 这个数据类型是很关键的。那比如说 f point, 它就是个 word, word 我们可以怎么样?可以直接点零,可以取到这个 word 的一个 bit 零, 我们其实是可以这样写的,我们编译一下,你看它并没有报数,就是它是一个 word, 我们可以写成 m w 零点 m m w 零点零,那这个操作是没有问题的, 那这个就是牵扯到我们刚刚讲的这个实力用的时候,呃,下面我们直接当前这个仿真模式,登录上这个 plc, 登录 上这个篇是我们观察两点。第一点 in out 型的变量,在这里 in out 型的变量,然后 它会变成 reforms, 我们看一下这个 f b c y, 你看它在监控的时候就已经变成 reforms to f b c y, 也就是说婴儿型的,婴儿型的变量本身就是一个引用型的变量, 那我们其实定义成这个 if c y 第七行的这么一个 if c y 的这么一个变量,其实跟 f b c y 是一模一样的这个功能,但是它有个最大的不同点就在于, 然后我们把这个全部注视掉,后面 忍不住写的这边会报错,他报错的原因是因为你必须为这个音奥型的病来进行复制,他为什么要这样强制你的要求呢?因为 f b c y, 它其实就是个引用,在对引用操作前,你必须要对它进行复制,这是变音器防止你在比如说使用这个 f b test 功能快的时候,你没有写这样一句话,你没有对这个 阴奥性病人进行复制,那么在功能块内部这个 f b c y, 它其实就是一个空运用控制针,那么你对控制针进行操作时候是会报错的。 那比如说,但是我们直接放到 input 里面,把它接定 i f c y 边音其实不会拐, 就像我们第二行一样,我们再编一下 input 型的这个 r f c y, 即使我们没有对它进行复制,它也是不会报错, 我们先一会再登录,呃,再讲一个这个 in out 型的,这个就是 f b c y, 就是说他为什么我们之前讲这个基本语法的时候,说这个 in out 型的这个变量从外部对这个功能快 进行操作的时候的 u i, 这是对这个东西进行一个 血的一个操作,看一看,对,他就是说不能被外物访问, 其实我们去读的话 if 等于零,这就是对它里边的根编来进行一个读,我们编一下也是不可以的。 那变音器为什么要做这么一个限制呢?我们假设啊,假设我们比如说第二行,我们对这个音 out 型的变成 f b c u i, 对他做了一个复制,但是我这一行程序, 我这个对公文宽内部 in out 型的变量读取的这么一个程序,我放到前面去,我们猜想一下,当我们程序运行到第五行,他的引用才会有值,但是我 我在第二行就对他进行一个毒操作,这显然是有问题的,所以变异器就一刀切,直接就禁止访问这些阴阴奥体的变脸。 但是呢这对我们在编程的时候就特别的不方便,就我们写好了一个功能块,我很很方便的,有时候在调这个功能块,然后再点里面,然后再点,然后再去一步一步去对某一个内部的一个层面边上做一个都写的一个操作,这样的话 就很很清晰嘛。但由于这种音奥特音奥特型变音器这么一个规律就没办法,那这个时候我们就可以使用什么呢?来使用这个 if c y, 我们再编一下, 有之前我们可以看登录上也可以看到这个 i f c y, 其实跟这个 f b c y 这两种 这边都是 reference 功能是一模一样的,那这个时候我们其实在使用 input 型的 reference 变量,就可以达到我们的这么一个效果,而且我们一定要干嘛呢? 在使用这种 reference 音铺的形成变量的时候,一定要确保你使用它的时候,前面一定是被这个引用,一定是被负过值的, 那我们怎么确保他是被复过,是不是 i f c y, 然后在这里直接等于 f b c y e, 就这不一定要有,而且你一定要想去的把这一行代码写在这个公众号调往下面,那你这个程序就不会有问题。 那你看我们后面还有这个 p c y p c y 在 man 函数里面,我们是没有对 p c y 进进行, 这个时候如果我们直接运行这个程,比如完整冲冲洗这个程序,我们再运行一下,看看会不会报错, 肯定会报错, p c y 没有对复制,但它这边会肯定会卡在第六行,我们启动一下那程序就直接卡在第六行,因为 p c y 并没有对它复制,你使用了一个未被复制的一个指针或者是引用,那这个程序就直接会崩掉, 就像那 prc 就会直接死,直接死掉,你就是这个时候只能通过在线初始去复位或者是断电重启 prc 才可以。 这就牵扯到另外一个问题,就是我们对于指针操作的时候一定要做一个什么样的操作,就是有效 性的一个判断,而比 p c y 不等于零,然后我们在这里面再去操作,我们在此刻再完整下载, 再启动程序,我们看一下程序会不会崩掉,那当前程序就已经没有了,没有没有出错,因为他判定的 p c y 指针没有负值是等于零的,那里边他没有去执行这一段程序,没有执行不,只要 不触发对于嗯那个空指针的这么一个使用,那程序就不是不会出错的。我们再看一下第四题啊,就是指针间 控时可见内部变量也用不可见这一块的理解,就是我们点开这个,我们可以看到里面像这个是指针型的这个变量,指针型的变量当前还没有被复制,我们可以试着什么呢? f b c y, 我们可以看到这个 f b c y 它其实就是一个指针的地址,这个 p c y 指针的地址是没有,我们可以通过也可以手动直接辅 你,比如说你七七八十六,井号二五九 a 幺八五零,那其实这个地址 是他的地址,他的地址就是 f b c y, f b c y 其实就是外部的这个地址,那这个时候我们先怎么着呢?比如说先把他的地址我们改成一个五十六,呃,变量直接改成五十六, 那这个时候我们再直接单击到 f b c y 里面去,这个时候这个是已经付给付给这个 p c y 了,这个 p c y 指向指针就是外边那个 右边的是五十六,我们点开看一下啊,那就是五十六,你对个,比如说把它操作改成七十八,那外部的这个也会变成七十八,因为他们指向是完全一模一样的一个东西, 但是在会存在,我们刚刚讲到你在监控的时候,这个 reference 里面他前面是个加号是没有的,你就是没有去办法去监控这东西 型的变量。但是我们在背符的 p r c 里面就是同样一模一样的程序,我们直接把它粘过去,在背符里面它是完全可以做到,就是可以监控引用这么一个变量。 下面我们打开这个这个春看这边开发环境,先把这原来的删掉, 把这边的所有内容不管全部把它粘过来, 直接当前使用的就是本地 本机电脑啊,我们直接登录上去 is 春开的底层跟 ctrl sees, 春开的底层就是 ctrl seed, 所以说代码你可以看到非常方便,直接粘过来,也可以什么都不用干。 我们再次点开这个 f b test, 我们可以发现 p c one 里面跟 q c 是一样的,是可以点开的。 那这个又可以引出另外一个问题啊,就是你可以看到他这个指针数位明显比这边要多,那就是我们在 ppt 里说讲到的另外一个问题,就是这个指针啊,根据你 run time 这个系统,三十二是四个, g 是四个字节,六十四个字是八个字节, 在这边你看他大概是八个嘛,就是四个字形,那在这边是十六, 谁是八个字形?我们直接在外部面函数对这个 p c y 做一个复值,等于 a d h 取 d 值, f b c y e, 在单机处看一下这个 p c y, 点开它里边这块插的跟可乐器是一样的, 那另外一个 reference 我们可以看到背负这边它前面也是有个加号的,也是可以直接点开的,而且比指针更方便,它只需要点一次里面的唇印边缘就可以了,那指针这边其实你要点两次,嗯,这个内容就应用场景,下面就讲 它这个指针的一些应用场景。那第一个就是操作数轴型的变量的时候,可以使用指引,用指向后使用, 该引用可以自定义成为有意义、有特定含义的一个名称。就是我们在有有时候编程呢,会有一种需要,比如说我在全级编当中,我定了一个 轴功能化的一个输出,或者第一个气缸功能化的一个输出。那我们如果,比如说在程序中你 直接使用这个数组的名称,那比如说可能会牵扯到这种零号啊,点什么什么,然后这样的这么一些个操作,一啊这个啊,抖音处这样操作的话,我们需要你 一定要记得零号是杠是哪个人走,一号是哪个人走,所以再次会引出,我们还要再定义什么呢?会定义一些媒体变量,我们使用媒体变量来定去替代这个零一二三,嗯,是媒体变量搞起来非常麻烦, 就是需要增加些额外的工作量。那这个时候其实我们就可以使用引用这个东西。你像这个 ifcy, 比如说我在这边我有一个 一个 r f 的一个哎,就是夹爪器的 clamp, 那我还有一个 上下七个 up, 还有一根轴 i f x a x 轴之间 的是,你可以把它理解为当前 f b test 功能块,它由啊两个气缸两根轴组成了一个小的一个这么一个系统, 那我们在这个功能框里面会使用到两分钟两根气缸,那我们如此定义的话,直接在歌程序中啊, if 那 if x a 的呃它的一个实时位置,然后 比如说等于五十,反正对于这根轴操作,无论你写一些什么样的代码,然后都没关系,就是我们就不用在这个轴里面去把它写成这个样子,就是直接调用。比如说 这 x a 是第一根轴,你不用这样去写,直接调全局变量啊,零号轴,这样去写这个零号到底是干嘛的?很麻烦,但是 r f x 啊,就是这个 x 轴,我们可以啊给他写一个定义, x 轴 x 轴。 在功能框内部,我们设计好这些 reference 的这些变量,在 man 函数中对这个 f b test 进行调用的时候,我们只需要做一些对这个指针引用,做一些操作就可以了。比如说 if r f c clamp 这个对指针进行应用,直接冒号,等于 a r c y, 我们是零号起杠 r f 啊,横一起杠, a r c y, 一号起杠 r f x 轴,我们使用的是零号轴 a r a x 零号轴 f y 使用的是一号层,如果还用到其他项目的,以此类推。然后就可以在你真正使用的功能框里面,我们把它把我们书组上毫无 命名的这么一个一根轴,再重新定位一层,我们可以识别的一些轴,因为这张这个功能块我不可以,我们不可能把所有的轴都会用到, 可能用到部分,我们用到什么时候就会把他的轴音应用尺寸放在这边。在这里推荐使用引用型的变量,因为引用型的变量你不需要使用这个三角号, 然后就可以直接这样去洗,就相当于你用真实的这个变量,实力变量是一样的这么一个效果。 这就是第一种场景操作数字的时候,第二种就是简化路径,这其实跟第一种差不多, 呃,比如说我这边可能用到了一个气缸,或者用到了一个一个什么样的功能块,这个功能块呢? 我如果要在这边去写,他肯定是,比如说他就放在了啊 gvl 里面全区变量啊,比如说里面有一个我弟 一个 test 的功能块, test 的功能块里面又定义了一个数组的一个功能块,再然后在里面又有一个什么 up 的一个什么功能块在里面才会有那个,比如说 f b c y 这么一个气缸,就这个路径真的很长, 但是由于我结构的一个一个要求,我还是我,我这个路就是没有办法变化,那这个手刹其实你想引用的就是一个气缸,那这样的话你就把这个气缸翻过来, 然后对这个,比如 i f c y 一,把这个路径在外部直接复制给他,那么你在你功能块里面,功能块里面就直接使用 i f c y 一就可以了,你不用每次操作这个 变量都要写这么长的一个东西,你可能对这个变量的成熟有很多,他的一个一个变量,再按一个变量再凹上一个变量,再懂一堆,你可能这这一行,这这可能会要写好长好长啊,这样的话可以利用这种啊引用 简化这个引入镜,然后这就是指针与引用比较常见的几个场景, 我们再回顾一下今天的一个主要内容,就是这个关键字,指针呢?变量了一个定义,就是加上 point 一个 reference, 呃,最重要最重要的就是我们对这个指针在使用的时候一定要事先做一个判断,除非 你确保你的公文块以及在任务里面的这么一个执行的先后顺序 执行到你纸巾使用的这一步的时候,你确保他肯定肯定是已经被复制过了,否则的话你就像当前这样执行,这样的话是不会有什么问题的。先判断指定有没有问题 有效,然后再去做一个使用,这就是我们今天要讲的一个指针和引用的一个用法,今天就到这里。

为了理解指针,我们首先需要直观感受一下内存空间。这里我们声明一个整形变量 a, 并把它初始化为一。编译器会为他预留一个四字结的空间。我们将这块空间取名为 a, 并复制为一, 他的地址对应内存空间在物理上的位置。同理,我们继续创建一个变量 b, 并促使化为二。开辟一块空间,命名为 b, 复制为二,对应一个地址。接下来,我们来通过一个复制操作来直观理解左直和右直的概念。 这里的 a 是一个左值,用于标识特定数据对象的名称或表达是。这里的 b 是一个右值,是能复制给可修改左值的量,用于储存值的数据区域,统称为数据对象。左值指定一个对 对象可以引用内存中的地址。右值可以用表达式的值这一概念来描述。等号不是区分左右值的标准, 但是复制运算符左侧的运算对象应该是可修改的左值。说说地址。地址实际上没有包含在内存空间里,他更像绑定在内存空间上的一个固有属性,对应内存空间在计算机里的物理位置。 但地址又不同于变量名。举个例子,我们说五零一教室是第一音乐教室,五零一教室是教室的位置, 第一音乐教室是教室的名字。某天四级考试,即使五零一教室改成的第二考场,他的位置也是不变的。地址对应一个物理位置,而 变量名是我们为了方便使用这个位置而给它取的名字。最后,我们进入正题,聊聊什么是指针。 指针是 c 元的一个内置数据类型和 inter char 的其他数据类型一样,指针的值是一个地址。正如 inter 型的值是一个整数, 他规定了地址的取值范围和储存地址需要的空间大小,还规定了指针这一数据类型能进行的一系列操作。再来说指针变量。 首先我们创建一个整形指针变量 p, 并把它初始化为 a 的地址,同理, p 将获得一个内存空间,名字为 p。 接着我们用取地址符号来取 a 的地址,先找到 a 的内存空间,再找到他的 地址,把地址复制到 p。 现在我们知道了什么是指针变量,指针变量就是一个值为内存地址,数据类型是指针的变量。 正如 a 是一个职位整数,数据类型是整形的变量一样。既然指针变量存放的永远是一个地址,那么指针变量的内形又是什么呢? 这里我们说 p 是一个 inter 新类型,实际上是说 p 里面存放的指针指向的那个内存空间,你的值是 inter 新。 最后我们再来讲一下间接运算符星号。既然指针变量 p 里面存放的是地址,那么将 p 作为右指时,表达式的值一定是一个地址。当我们使用指针更多 是为了获取指针地址上对应的值,这就需要用到间接运算符心。好,现在我们来获取指针所指向的值,并把它复制给地。 首先我们要定位到指针变量 p, 然后获取 p 里面存放的值,接着通过地址找到对应的内存空间,然后去内存空间里存放的值,再把这个值复制给 d。

今天我们继续学习 ctc 使入门篇常用开发环境调试技巧的如何触发中断调试。 中段调试的菜单都位于调试,调试下面有下面几个菜单可用 默认这个设施以及清除断点默认快捷键是 f 九,我们这边已经改成奥特加一,那奥特加一是设置程序停在哪一行, 那么下面的跳阔,跳入,跳出运行到光标处,设置下一条语句,分别的按一下的一个功能是触发从当前 的中断了这一行程序往下直行的动作。那跳过, 跳过指的是什么呢?跳过指的就是不管你是下一行是简单的复制一句,还是调用了一个功能快,他都会把内行的程序完全执行了。如果是一个功能快里面有一百行程序,那么他也会执行一百行, 那跳入就是如果你执行了这个功能框,他就直接跳到跳进这个功能框里面,那么跳出是相对于跳入来讲, 跳出就是相对跳入来讲,他们俩是一对,就是我按一下奥特加跳进这功能块,但是我又不想一步一步完整的直 新玩这个文化可以就利用这个跳出功能。那运行到光标处有点特殊,我们一会用历史去做一个讲解, 那下面就是有两个点,就是触发中断的这一行会变成黄色,那么只有前段有圆点的这个灰色圆点的才可以设置中断。那么下面我们开一个程序, 这一个 program 是我写了一个简单的灯,三种状态控制了这么一个程序。 i state 是一个 interesting 是一个状态,零一二代表关灯、开灯、灯闪烁,这是个电视器,这是一个 灯的波亮的这么一个输出,输出信号,下面我们已经出一个仿真模式登录这个程序,奥特加一 登录完成以后,当前的程序是属于一个停止的状态,我们需要单击这个启动或者是在线 调试,这边有个启动默认的快捷键,就是 f 五,这个是没有改的,我们按一下 f 五 上学已经属于一个当前是一个运行的状态,但是当前的所有的变量看上去好像没有任何的反应,这个也很简单,因为 is 在的状态是零,那么他一直在执行这个灯等于 fast, 灯原来就是 fast, 所以你看上去好像这个程序并没有动一样。 那下面为了让看的更清楚一点,我们加一个计数器,这个计数器在这个程序是一直属于一个累加的状态,那么如果程序在运行的话, 你可以很明显的看出来程序到底有没有在跑 那虽然我们刚刚讲完了这么一个零一二,零是关灯,开灯,灯闪烁,这是个定时器, 定时器默认等一处开定时器,定时五百毫秒,定时器到达,进入衣服语句,衣服第一行先把灯取反,然后再关闭定时器,由于你当时的 ice starred 还是等于二,那么他 趁以后再回到第七行,再开定时器,然后再出发定定期到时,然后再去返。有这么一个流程,我们如果对刚开始对定时期相关的功能快不是很熟的话, 你还是不是那么清楚,所以说我们就可以用到这个中断的功能,让你非常清晰的看到这个程序的执行的一个状态。下面我们先看第一个,就是设置这个断点,我们要设置断点, 首先有圆圈了才可以设置断点,那么三号是有圆圈的,我们按一下这个调试切换断点,奥特加一为了三号就触发了这么一个断点。程序 触发断点以后,我们发现这个技术已经停掉了,比如说当前程序已经是一个停止的状态,那触发断点的这一行也会变成一个黄色,下面我们如何针对触发断点的下一步的这么一个操作, 那就是奥特二三四,在此之前我们先取消这个断点,再次单击奥特加一,就是切换断点,然后我们继续让这个程序 运行起来,就单击这个启动,或者是按下快速线 f, 我们可以发现程序又继续跑起来。此刻我们光标放在第零行,第二行前面是没有圆圈,我们按一下奥特加一, 所以呢会报这个错误,说不能在第二行,然后失职。断点不是一个有效的断点位置,第四行也同样会报这个错误,那第五行 没问题,但是第五行你设置断点成功,他并没有变黄,程序也并没有停止下来,是因为当前的程序控制了逻辑,他不会停到第五行,所以说不会停到这里来。即使你在这一行试这个断点,他也是不会触发这个断 这个中断程序的,就像第七行也是一样的,我们都可以设置断点,但是他并不会在这里停。下面我们把光标点在第二行, 然后在这里单击这个切换断点,同样触发了这么一个那个疑问, 出发,出发了,刚刚的这个错误让我们再次在第三行出发这个断点下面我们使用调试的这个功能跳入功能奥特加二,我们单机械奥特加二,发现他就直接跳到下面去了, 我们再次单击奥特加二,他就回到这个 reton, reton 的话他就会返到第一行重新继续执行,再单次单击一次奥特加二,他就回到了第一行,我们直接按试用会计进行奥特加二, 奥特加二,奥特加二再回来,这就是当前默认查的程序一,一直在刷,一直在刷,就是这样刷的,那我们 们取消这个断点,让程序一直跑起来, ctrl 加二退出当前的这个程序,因为我们刚刚都是一个单行程序的一个指令,我们下面调用一下这个 program program 跟这个 prom 就是直接复制了一下, 我们在加一之前调用这个杠一的 program, 我们再次在零号这里出发,断点奥特加二, 走到第十三行,十三行是一个 program program, 杠一里面有这么十二行程序,然后我们如果在此刻按 一下奥特加尔,你会发现他直接跳进了这个 program 里面,然后在奥特加尔他还是在一步一步的去执行这边的程序,那奥特加二执行完以后,他会再返回原来的这个吊用点,在奥特加二, 在奥特加二再继续奥特加上跳入,再跳入,再跳进来,那此刻我比如说我到地上,后面的我不想看,我想直接跳出,那就可以用到这个奥特加四,奥特加四直接跳出来, 然后再奥特加二,再奥特加二,那么奥特加二跟奥特加四四就是对于你当前执行行,如果不是一个简单的复制议局,是 功能快,或者是一个 program, 或者是一个函数 f c, 他都会有刚刚的这个功能,会跳进去,然后跳出来, 那奥特加三呢?奥特加三,比如说来到第四站好,我们直接奥特加三,他会直接把整个 pro m 杠一完整的跳过去。 也就是说对于奥特加三来讲,如果执行是像四行这样的通用的非功能化的这样的一个标准语句的话,奥特加二跟奥特加三是一样的一个效果。 那么如果执行的是功能快或者是函数类似的这些,调用了一系列的这么一个程序的这么一个函数块的话,那奥特加二会跳进去,奥特加加三,他就会直接完 完整的执行往里面的所有的程序。那当前我们在从奥德加斯就是跳出这个直接直接跳出来,我们在全速的运行,那对于中段来讲的话, 大概就是这这个样子,我们让程序继续再抛起来,此刻我们取消这些断点, 我们在第七行加一个断点,然后对断点的状态复制一个二,然后再来完整的去看一看这个灯散数到底是如何完成。 ctrl 加 q 写入, 他会来到这个断点,首先首先我们按一下二次加二, 然后呢 t red, 他是一个,他就其实就是一个功能块,但是呢这个功能快的元旦我们并没有,所以你进入一个系统的一个功能块 的话,你是进不去的,因为你没有元代码,所以说他就会谈这个错误,他你找元代码你肯定也没有,就直接点否,点否的话,他就相当于执行那个奥特加三就直接跳过去了,也就是说遇到系统的这种功能块就不要奥特加二了,只要奥特加三跳过, 也就是说在这里直接开启了电视器,然后我们奥特加三当前的 q 是 fast, 他就直接里面的程序就不动了,我们再调回来,在奥特加三一直奥特加三, 再回到这里来,再奥特加三执行一次,你就发现这个 qq 已经亮了,这个 qq 已经亮了, 让我们再次单击二,再加三就会进入到衣服里面,把灯取反,这时候灯取反下面是执行了一个英语等于 fauce, 把这个定时器 现在为了关掉,当我们执行完以后,发现这个 q 会变成 fas, q 会变成 fas, 音乐变成了 fas, 然后我们再次二次加三,再回到二 在这里,然后他就会干什么,再次重新开启电视机,然后再等待电视的到达,然后也就是说如此的反复,如果我们成 去把它开起来,你会发现这个 light 一直属于一个闪烁的这么一个状态,在这里我们把程序改一下,比如说我是一个点,这是出席者学定时器非常容易犯的一个毛病, 那此刻我们还能不能完成这个灯的这么一个 这么一个闪烁的功能?你会发现这个的这个电视器音是 fast, q 在一直亮,因为我们刚刚中断演示的,发现这个音是 fast 的时候, q 一定是 fast, 就感觉拿了这个系统有我就不对了。 然后这个时候我们再二再次加断点,你会发现 此刻 q 是处的,音是处的, q 也是处的,我们在这里把灯取反,我们注意第十行,我们虽然把音等于 fos, 但是这个 q 并没有 fos, 所以为什么呢? 这种吊用的方式跟我们之前执行的不一样,你之前执行的相当于把 tyride 你执行的一个功能快,你是掉了这个 tyride 的功能快,但是 我们改完以后的第十行,他其实只是把这个功能快的银角音把它给 boss 点,你并没有去执执行这个 t read 的功能快。 t read 功能快,就像我们这个 pro m 杠一里面,它里面写了肯定不止一行程序,那么你并没有调用这个 t read 的功能块,也没有执行里面的复位程序,那么对于这个 q 定制器来讲,那肯定是还是一直去的,那我们继续奥特加三, 再回到, 我们在这里再加个断点,奥特加三 这个时刻音是 fast, 我们再回到上面继续执行,再回到这一来,再回到再来。我们发现由于虽然你上次把音写成了 fast, 但是当第七行调用这个 功能快的时候,他的眼角给的还是球,那么对于这个 t red 的功能快来讲, 他当在执行里面的定时语句的时候,对于他的银角音来讲,他其实一直处的,他并没有放肆过, 因为当你 boss 的时候,并没有执行这个 tro 的里面的功能快,也就是第十行,这只是对他那个银角做了一个副词语句,第七行才是真正执行这个功能快,那我们也就是说 在上一个循环对他做了一个 boss, 但是并没有执行功能快,所以定时性并没有复位,那么第再回到第二个周期,再次给他对触,那么这个 q 他一直是处的,那么也就是说你这个取反 他其实是没有对他做一个五百毫秒的延时,他一直在不停的进行去返,然后你看上来好像就感觉, 就感觉他虽然也一直闪来闪去,你就发现他闪的特别不规律,这个不规律是因为你这个他这个显示监控的一个延时所导致的这么一个这么一个现象。 那这个就是我们今天所要讲的这么一个中断的功能。我们大家再来简单的总结一下,触发中断 至少设置断点需要注意的一点就是前面必须要有灰色的才可以设置断点,你设置断点并不代表一他一定会触发,触发这个 断点还需要你实际的程序逻辑,如果能走到这一行,他就会触发断点。你比如说我在这在十三行,你只要处罚断点,他肯定是肯定是会触发了,因为这一行对于程序来讲他肯定是会扫到,扫到这一行除非干嘛?除非你在 第十一行后面加一个方循环,而且这个方循环死循环永远不让他往下走,那在这里他就不会出发。 然后四处触发断点以后会可以利用奥特二三四来做一个跳或跳入跳出的这么一个动作。 那至于运行到光标处以及设置下条语句,我们来再来简单的看一下,比如说我们当前的中段设置在这里,那下面 面我们直接右键,我希望他让他停留在第十四十四行,那么按照之前的这么一个写法,就是现在时常加个断点,然后启动一下,他就会停到这里来。 那么有没有更简单的一些办法呢?就是你直接右键选择设置下调运行到光标处,他就会直接直接停到这里来,就相当于你这一个按一个操作方式,相当于我们刚刚演示的先加锻炼再运行, 我们再执行一次右键运行的光标数,那我们 在运行这次我们移动到这里运行的光标处,我们直接奥特加三,当前的基督期的值是七八 九零,我们发现他就是加了个一吗?那我们再直接走,那在这里我们再回到 设置下一条语句,呃,设置下一条语句,你这样做一个验证,在四行加一个断点,这段断点取消 停留在这里。如果我们使用运行到光标数的话,我们可以看一下当前的这个急速器,七八九幺,他会加一,那我们再次全速运行,再停到这里来。此刻我如果使用设置下调语句,我们看一下这个七八九, 会回家会发现这个光标往上移了一步,但是寄宿器并没有加,也就是说这两个的区别就是运行到光标处, 你使用运行到光标处的时候,从十四行到十三行,他是按照正常的任务的配置,一行一行执行完再返回来,在第二个周期再回到十三行,这叫运行到光标处,所以因为技术就会加一, 但是这个叫设置下一条语序,他只是程序的指针直接往下往上移,他并没有, 并不会做按照成任务执行的这个状态,所以说这个是知道下调一句什么时候会用呢?当我们在调试了一系列的功能块 或者一个方法的时候,比如说执行到了第十三户,我突然想再仔细的看一看我第三行到底执行了一些什么东西,你此刻就可以直接右键选择设设置下一条语句,当前是不可选的,就是我再想返回, 在想返回我刚刚执行过的一句,再看一看到底是怎么执行的,就可以利用这个叫事实的下一条语句,他一会直接直接跳上去, 那有关中断的相关的一些操作,我们今天就讲到这里。

高原基础系列教程高原中的指针,指针是一种数据类型,用来表示数据的内存地址。 首先我们来声明一个音的类型的变量,它的值为十, 然后通过按的符号来获取电量 a 的内存地址, 通过按的符号来获取 a 的内存地址,来打印一下 啊,这就是 a 的内存地址,然后 我们来打印一下这个内存地址的类型, 通过百分之二大写的题来获取电量的类型, 那么按的 a 这个类型是星号 inter, 我们来声明一个指针类型的变量, 指针类型的变量以星号开头,后面是变量的类型,也就是一个硬的类型的指针变量。 然后我们将 a 的内存地址复制给 b, 然后我们来打印一下 b, 可以看到 b 所存储的值就是边量 a 的内存地址, 然后我们通过新号来获取一个指针类型的指, 通过新号获取指针所指向的内存地址上的值, 这就说明这个指针类型的变量 b 所指向的值是十,我们来修改指针所指向的值, 修改为十一,然后我们来打印一下,打印一下指针 b 所指向的值以及 a 的值, 那么我们发现 b 的值, b 所指向的值为十一,那么 a 的值也变成十一了。因为 a 和 b 同时使用了一个内存地址,所以在修改 b 内存地址指向的值的时候, 也会将 a 上面的纸修改掉,因为他俩是同一个内存地址。好,这就是指针的基本用法。 通过按的符号来获取一个变量的内存地址,然后通过新号来获取一个指针类型变量内存地址上的值。然后我们再来看一个例子, 我们来定义一个自针的方法, 也就是传入边量,然后将这个变量加一 来运行一下, 我们将这个变量 i 等于十,传递给这个函数,然后函数里边将这个 i 进行加一,实际上他应该变成十一,但是在外面呢,没有任何改变,依然是十,也就是说这个默认的参数的传递 是使用的直传力,也就是拷背,将这个实拷背一份传递给这个函数,在函数内部进行对值的修改,不会影响函数外部这个变量,那么我们来修改一下,将这个艾特类型修改为 inter 类型的指针, 这里传入这个电量的地址,在此打印一下, 这样我们会会发现这个,当我们将这个爱的地址传递给这个函数,那么这个函数将这个地址上所指向的值进行了自增,那么在外边来获取这个变量的时候,他的值会发生改变, 也就是说如果改变了一个内存地址上的值,那么所有指向这个内存地址上的电量的值都会发生改变,这就是购源中的指针。

c 语言的函数指针你真的理解吗?刚入行的同学一定要收藏好视频暂停,先记住这句话。第二行是一个函数声明,因为我把 plant function 函数放到 me 函数下面了,然后第四行就是定义了一个指针函数 格式就是用括号先把星号 pine 写成整体,后面跟着一个函数的空括号。因为我的函数是无参函数, 所以括号里什么都没有,把函数名直接复制给 plan 这个函数指针其实就是把 plan function 的手地址让 plan 去引用了第五行代码直接跳到了函数的手地址位置, 然后就会执行这个函数了。我们来看一下运行结果,成功输出和 low one。 那这有什么用呢?首先 看一下第二行和第八行写了两个函数,第二行的 use l back 的第二个参数是用来接收函数指针的。第四行意思语句就是判断函数指针参数是否为尿,如果是,那我不会去调用第八行的函数。然后我们看主函数 第十二行调用了 use cave back 这个函数,传递了一个数字一和一个函数,此时就会执行第三行的输出语句,并且帮你调用你想调用的函数。所以接着输出一个 halower 第十三行代码或第二个参数传递的是酿,也就是没有函数给他调用,所以就只是输出了传递过去的一个二的指函数指针可以玩的方式还有很多,大家可以通过搜索引擎去了解更多玩法视频,最后别忘记点个关注。

道何从剑所指?欢迎来到只见问道。前期视频呢,我们零零碎碎的讲解了一些 c 语言相关的基础知识, 讲解了之后呢,有网友就反馈说,对于 c 原装的指针呢,希望能开个专门的视频讲解一下。 那我通过总结发现, c 元的指针呢,他所涉及的这个知识点呢比较多, 那么接下来呢,我将把这些知识点呢通过一定的方式呢给大家整理出来,然后呢把这些统一的进行一个实现。好,我们来看一下 c 元指针我们都需要学习哪些知识, 要掌握哪些知识呢?首先呢,对于 c 元的指针呢,我们主要要了解三点。第一点,指针的本质, 指针的本质呢,它其实呢和我们普通的这个变量呢是一样的, 他呢也是一个变量,只不过呢他呢一般呢从指的这个数据呢,他表示的是一个内存的地址,一般情况下这个指针呢, 他呢和运行的机器总线地址基层器的字节数呢是一致的。这个话怎么理解呢? 我们刚才说过,它本质呢是一个变量,它从事的值呢是一个地址,那我们计算机的内存的地址呢,就跟地址总线呢的宽度有关系, 所以说我们的这个指针呢,他从的这个值的位数呢,一般跟我们这个计算机呢,运行的这个总线呢宽度呢是保持一致的。 第二个问题,我们需要关注的是指针里面存储的这个值,刚才我们简单的也说到了指针变量呢,它里面存储的呢是一个内存中的一个地址,一般呢 它是对其重尺的,怎么叫对其重尺的呢?比如说我们的这个指针变量呢,是一个 inter 类型的指针变量,那在三十二倍的机器中呢, inter 变量呢,它一般呢所占用的字节是四个字节, 那么 inter 型的指针呢,它所对应的这个地址呢,一般呢也是按照四字节来对齐的。 了解了指针呢这两个相关的概念之后呢,我们还需要知道,指针呢有各种各样的不同类型的指针。 因为通过前面的两个特性,我们知道指针他本身呢也是一个类似变量的一个存储的一个机制,他存储的呢 是我们内存的一个地址。那知道了这个事情之后呢,我们还需要知道,因为我们的 c 元中有各种各样不同的数据类型,那么对应的呢,就有各种不同类型的指针。 我们说过 c 元里面的基本数据类型有什么呢?有表示数型的数据结构,有 short, int, long 和 long, long 这些类型呢,都可以用 onside 和 side 关键字来修饰,然后呢,把它扩展为有符号数和无号无符号数。同样呢,对于字符型数据呢, side 叉用 onside 叉可以 用来表示一个比较小的数,同样用叉呢,也可以来表示呃,一个阿斯卡玛字符。同时呢,为了扩展我们的数据例型, c 元呢,引用了引入了结构体指针, 引,引入了结构体数据类型,那对应的就有结构体指针,引入了公用体媒体数组啊,引入了这几种数据类型呢,他对应的呢,就有这两种数据类型的指针。 同样的呢,对于 c 元里面的这个基本功能模块函数呢,他本身呢也有指向他的一个指针, 另外 c 元还支持指向任意类型的这种指针,那任意类型的指针呢, 它可以指向于我们所给你的上述的这种任意数据类型的一种指针,那它有什么用呢?它呢主要体现了指针的前两个概念,一个就是它的本质,另一个就是它它的存储, 也就是说他只体现出了指针呢存储的就是一个内存的地址啊,了解了这些之后呢,我们还能对他进行进一步的扩展,既然 指针变量呢,他存储的是一个内存变量的地址,那么呢我们可以对他呢进行进一步的扩展, 我们可以定一个指针变量,它里面同时的呢可以是另一个指针,这样的话呢我们就可以按照这种低规的方式 定义出指向指针的指针。那这些东西呢,我们后面都需要讲解到。好,现在呢我们简单来回顾一下,我们了解指针的本质这一块呢,我们需要了解一下以及他从事的指,把这两结合来看, 我们就可以说指针呢他存储的是一个内存的某个地址, 然后呢他从处的这个数据呢,所占的字节数呢,和我们机器总线呢,一般 他所占的位数呢是保持一致的。最终呢我们还要了解一下指针呢,因为他有不同的数据例行,所以呢同样的就有不同例行的指针。好,那知道了这个是 请之后呢,我们接下来看一下,我在后期的视频中,主要给大家讲解一些什么知识点呢? 好,我们呢主要从以下几个方面来讲解 c 元的指针相关的知识。第一个就是我们怎么获取某个变量的地址,比如说我们定义了一个变量,或者说是一个嗯, 某种类型的一个数组等等的这种变量,那么他呢一般呢是存储在我们的内存中,那我们怎么能获取他的地址呢?这个呢我们后面呢会说到 这里呢,我把某个变量呢用实体来标示出来,主要是为了说明我们定义的每一个变量呢, 他都要有一个对应的占用的一个内存,把它实实在在的保存下来,所以他对应的是有一个真实的物理存在。好,我们再看一下第二个知识点,就是 指针变量实体的定义,就说我们怎么样定义一个指针变量呢? 下面一个指针变量的声明,我们定义呢跟声明呢,这其实呢是两两个概念,我们定义的时候呢,一般能说明某个东西是某种事物,然后我们声明的时候呢,一般会 基于这样的观点,就是说告诉别人有这么一个事物。那么第三个呢,我们会讲一下指针变量的初始化,这个指针变量的初始化呢?这个呢我们 不仅是讲基本变量,基本指针变量的初始化,我们也会讲结构体指针,嗯,数足,指针指针数足,对吧等等相关的一些变化。 另一个呢就是要讲解一下指针变量的一个负值啊,这个负值呢,我们在初始化之后呢,一般指针变量呢,他会指向内存的某个地址,那么在这过程中呢,我们对他进行的一些复制操作呢,需要注意一些事情。这个我们后面会说到 另一个呢,我们居然对然我们呢对这个指针指针变量呢负了值,那我们同样呢也能得到他的值,这个呢就相对比较简单一点,另外呢我们呢还要对指针变量的这个, 嗯数据呢要进行一个运算,对指针呢进行指针变量呢进行一个嗯加或者减的这种操作,那么他所对应的实际的意义是什么呢?我们后面也会讲到。 另外呢就是我们怎么样通过指针呢来改变指针所指向的这个对象里面的一些数据。呃,或者说我们怎么来引用这个指针指向的这个对象里面的一些成员的一些数据。嗯, 这里面呢主要包括指向的这个对象呢有哪些呢?一般呢我们这里会说 他指向的这个对象呢有一些基本的变量,还有一些结构体变量,数组函数以及指针等等。那最后的一个呢,我们主要呢说一下 指针变量作为一个函数传餐的时候呢,他呢是怎么样使用的啊?顺便呢我们基于这个呢会讲解一下他跟数组作为餐传餐有什么区别, 这一点呢我想在呃大多数的人呢,在学习的过程中对这一点呢把握呢都不是很清晰,那么通过我们后期的一个讲解呢,大家对这一个呢就会比较熟悉了。 好了,今天呢我只是概括性的说一下后期我们所要设计的一些内容, 如果大家对后期的内容感兴趣的话,希望大家关注我或者收藏该视频,请关注我,我会在后期的视频呢给大家一一的把指针这个 知识点给大家搞懂,给大家讲透。好的,想要探索更多的编程知识呢,欢迎大家关注,指尖问道。好,今天就到这里,谢谢大家!


看个三维数组的笔试题,给定下列声明,把下列各个指针表达式转换为下标表达式,这是最近学生在做笔试题的时候遇到的。先别管这个三维数组有没有实用价值,既然出现了,还是得做 三位数组,可以看成由多个二位数组组成,比如题目中声明的这个,就是由四个五行三列的二位数组组成,把这个二位数组编个号就是零一二三。 三维数组比二维数组更加复杂一点。我们先来搞懂几个概念。在三维数组中,数组名 arry 表示第零个二维数组的地址, arry 零表示第零个二维数组第零行的地址。 ori 零零表示第零个二维数组第零行第零个元素的地址。 ori 零零零就是具体的元素,他不表示地址。再来看题目,新 ori ori 表示第零个二维数组的地, 新阿瑞表示第零个二维数组第零行的地址,下标表示法阿瑞零。新阿瑞加二,阿瑞加二表示第二个二维数组的地址,再加新号就是第二个二维数组首行地址,下标表示法阿瑞二, 新阿瑞加一加四。阿瑞加一表示第一个二维数组的地址,加上新号表示第一个二维数组首行地址,再加四表示第四行地址,下标表示法阿瑞一加四。 第四题在第三题的基础上又增加了新号,含义再次改变,表示第一个二维数组第四行首元素地址,下标表示法 orange 四。 第五题最简单,直接表示第三个二维数组第一行第二个元素 ori 三一二。第六题虽然也是三个星号, 但是写法跟上面略有区别,星 oray 表示第零个二维数组首行地址,加一表示第一行地址,再加星号表示第一行首元素地址,加二表示第一行第二个元素地址。最后一个星号就是曲直,用下标表示法就是 oray, 零一二, 最后三个留给大家练习使用。如果你知道答案,直接写在评论区。在数组和指针的概念中,星号和中号有相同的意思,虽然有时候不是真正的取值操作,但是可以改变地址的含义。 比如题目中出现一个星号表示行的地址,出现两个星号,表示元素的地址,出现三个星号就是具体的元素。

ctc 指针数组的应用,前面我们利用结构体数组封装了这个轴控的 fb, 但是还留下一个问题,如果说我轴数很多,比如说有二十个轴,那么这里要改成二十, 这些都要改,就比较麻烦。这个时候呢,我们可以利用一个指针来进行减少我们的工作量,具体是这样的可以看一下啊, 这个 point 是指针的一个关键字,它指向一个类型,这个类型 access, r, e, f, 杠 s, m 三, 这个类型就是这个电机的名字对应的一个类型。好,这个零到 access number, 它是一个数组,也 也就是说我们这个整体它是一个指针数组,可以看其他地方啊,这个地方呢是有一个 a, d, r, 它是 address 取地址的意思,它取的是这个轴 轴的这个名字的一个地址,把这个地址复制给这个数组, 然后有什么用呢?这个零一二,后面我们要用货循环,这个是代表取这个地址上的一个内容,取内容 这个 ai 是一个变量,零到二的一个变量,这个时候呢,我们一个负循环就能代替很多个轴了,就提高了一个工作效率。
