书主在自动化测试当中应用非常广泛,而且那不就自带了蛮多的一个书主的一些工具函数, 我们看一下,他可以求数组的尾数大小了,所以呢还有可以替换数组,插入三处元素,三处数组等等,而且也可以,嗯,求数组当中的一些最大值,最小值, 嗯,还有一个很关很重要的,就是一个他可以搜索一位数组, 他可以把数据里面的任何一个元素,那搜索到他的这个位置在哪里,但是找了这么久我们就发现他只是搜索一位数组,但是我就没有找到这个搜索二位数组,因为 曾经有朋友问过如何搜索一个二位数组,在今天我就发现一个技巧,我们可以把这个二位数组转换成一位数组,然后 进行搜索,用一位搜索一位数的方式把它搜索到这个他的这个缩影,然后把这个缩影再转分成二位的缩影,这样我们就完成了这一个搜索。那具体的操作手法呢?我们来给大家详细介绍一下。 在这里我已经在这里创建了一个二位数组,那么嗯,具体的这个程序框图是这样的,这个数组首先我用这个 这个球他最大值,最最小值,这个我只是为了演示一下用的,和搜索二位数组关系不大,随便连到这里,这前上面,这里,这里有一个重排数组为数, 这个函数呢是他这里有个尾数大小,这个尾数大小就是指你把这个嗯排出来的,而一位数组到底是多大的一个数组,那么我们就可以 把这个二位数组我们先运行一下,可以看到这个二位数组,他是一个八行其列的一个数组,那这样他总共八七五十六个元素,那五十六个元素我们就可以通 过这个嗯,数组大小,然后把它缩影出行和列,然后一乘起来就得到五十六个,那就填到这里,这样他就会说出一个五十六个的这个二位数组。 那我们可以试一下,比如说我现在看看这五十六,那他五十六个的话,所以是五十五,最后一个, 你看这五十五他刚好是这个就是死。那我们这个输出的一位数字之后,我们用搜索一位数字的方法,我把它搜索出来这里搜索的内容,然后搜索引到的数字, 然后在同一个嗯,二位数字里面的有可能不止,我们要搜索的内容不止一个数,可能有好几个, 那么我们可以用这个循环的方式把它嗯收缩出来。这个方法呢?嗯,具体细节我就不建设那么多,给大家介绍一个。呃,思路就是这样的,它还是收缩移位速度, 因为这个一位数组搜索到之后呢,他就会把所有的纸输出来,如果说搜索到不到没有了,他就会输出负一,那当他等于负一的时候呢,我们就停止这个退出这个循环。 所以说我们如果搜索到了之后呢,我就把他的所引的这个位置的再加个一来继续搜索,就用这种思路完成 好了。总共思路呢就是这样,方法也是这样,也不会太难,我们来运行一下,具体建设一下, 你看我们一运行这里才显示到八七,这里球最大只最小只是他自带的就这里最大是九十九,你看在这这个位置,他的缩影呢?是最大缩影。在四行三就是第第五行、第四列的位置,这 一二三第四列,一二三四五,第五行、第四列是没错了。然后呢最小只是零,他是在第 第零行第六点的位置,哦,第七点的位置是吧?一二三四五六七就是这个,所以这个就是没错的了。那么我们来搜索一个,搜索个零,刚才搜索内容是零,我发现 他这里呢,他这里是所有行,他就有好多个,你看这里一二三四五六七八九十十一十二十三,总共有十三个,那我们这里有十三个零,所以太多了。我们搜索另外一个吧,比如搜索个五 来运行一下,当搜索个五,我们看到所引到的元素,第一个就是我们单单个搜索的时候,他是在二十八的所引位,二十八,我们把这里 看看,调到二十八,是不是这个就是个五,那么我们发现第二十九、第三十这个位置也有一个五,所以说让我们看看这个是多少。 他二十八的时候,我们通过这个已转换,我求求这个余数和商,我他爸的已转换就成。所以行,所以列这里能看到 第一个五,他是在第零列和第五行的位置。一二三四,第五行、第零列这个位置, 这第二个五了,他是在第二点还是在第五行,是吧?第五行一二这个,所以为二点这个位置,所以说这个就, 嗯,所以说这个位置就定位很准确了。然后这后面呢,虽然有个六,但是这下面是个负一,就证明他没有了,所以总共就两个,那我们再随便再选一个吧,比如说选 能够二十二十,我们再运行一下 那二十,他这搜索的会在第二个位置,就是这个一位数组的时候在第二个位置, 你看他这二十这是零一二啊,那么在这个二位数字当中呢,他就会在 第二列和第第零行啊,就是这个位置,第二个呢是在第四列, 第五,第五零一二三四五一零一二三四在这个位置,所以说这个位置还是准确的。那么用了这种方法,我们就可以精准的搜索到他在二位数组当中的一个 缩影纸,为了方便期间呢,嗯,你可以把它建成一个纸程序, 嗯,以后在使用的时候直接吊用就可以了。那在我的前面的几个视频当中有介绍如何创建纸程序的方法,大家需要的时候可以去看一看。 好了,今天的分享就到这里,谢谢大家收看。
粉丝306获赞766


大家好,今天我们讲第七章数组二位数组。 首先我们看什么是二位数组。二位数组是具有两个下标的数组元素构成的数组。例如 inter i 五一位数组 inter b 三四二位数组。因为这里有两个下标,这里只有一个下标。 接下来我们看二位数组的定义。二位数组定义格式如下数据类型说明符合数组名正正型产量表达式正正型产量表达式。需要注意二位数组元素在内存中存储的顺序按行优先原则。 例如 interl 三定一个两行三列的数组有六个元素 两行行下标有两个三列,列 下标有三个。第一个元素 a 零零行下标列下标。第二一个元素 a 零一行下标列下标第三个元素行下标列下标。依此类推。 接下来我们看二维数组的引用。二维数组的引用格式如下数组名行下标列下标。一定要记住前面的是行下标,后面是列下标。 原程序当中定一个两行三列的速度。第一行第一列对应的是八二零一,第一行第二列等于六二零二,第一行 第三列等于四 a。 一零行下标是一换一行,第二行第一个 a 一,第二行第二个 a 要第二行第三个。 接下来我们看二维数组的初始化。数组初始化指定义数组的时候,给数组复出,则按行给二维数组复出。则例如 int i 二三两行三列, 第一行第二行每行里面有三个元素,等价于下面这种写法。两行三列。我们可以发现每一行 对应一个一维数组,所以二维数组可以看成是一维数组组成的数组。第二点将所有数组元素按行顺序写在一个花括号里面。例如 inter i 二、三两行三列。 因为我们前面讲过,按行优先原则,先给第一行负责一、二、三,然后再给第二行负责四、五、六。第三点 对部分数组元素复出值,没有被复出值的默认为零。例如 inter i a 三、三三行三列一、四三二幺二。这里说明第一行只有一个一,第二, 二行有四和三,第三行有二幺二。所以第一行得到幺零零, 第二行得到四三零,第三行得到二幺二。大家需要注意,对部分数字元素付出值里面有花括号和没有花括号是有区别的。例如这一个 一、四、三二幺二,没有发括号。那么得到结果按行优先,先给第一行三个幺四三,给第二行三个二幺二,因此后面三个为零。 第四点对全部元素的负责。二维数组的第一个下标可以省略,第二一个不可以省略。例如 inter i 方块三一、二、三、四、五、六。系统会根据固定的列将后面的数值进行划分。我们有三列, 六个元数除以三,刚好两行,所以它等价于下面这种形式两行三列。 但是大家需要注意, int i 方块三一、二、三、四。我们这里有四个元素,除以三除不尽。那这时候怎么办呢? 大家注意思考,如果我用一行三列,行不行?肯定不行,因为一行三列只能放三个元素,但我有四个元素,所以我们 需要用两行三列。那两行三列它的元素怎么显示呢?一、二、三分配给第一行,四分配给第二行,但是还缺少两个,缺少两个用零表示。 接下来我们看二位数组编程举例。将举证两行三列转换成三行两列。例如数组 a 一、二、三、四、五、六转换成数组 b 一、四、二、五、三、六。 a 数组的行, b 数组的列。 i 数组的存储形式 i 零零对 一, i 零一等于二, i 零二等于三, i 幺零等于四, i 幺幺对于五, i 幺等于六, b 零零等于一, b 零一等于四, b 幺零等于二, b 幺幺等于五, b 二零等于三, b 二幺等于六。这里我们可以发现 a 零一, b 幺零,它们两个行下标和列下标相反。同理 i 零二, b 二零行下标,列下标相反。 同理 a 幺零, b 零幺。同理 a 幺二, b 二幺。因此,只需要将 a 数组行下标当做 b 数组的列下标, a 数字的列下标当做 b 数字的行下标就可以了。接下来我们进行编码,实现 定义。两个整形变量 a 和 j 分别表示 a 的行下标, j 呢?表示数组 a 的列下标。 使用循环语句。因为 i 数组只有两行,所以从零开始小于二。 a 数组有三列,从零开始小于三。然后 b 数组的行下标等于 i 数组的列下标, b 数组的列下标等于 a 数组的行下标即可。 好,完善代码。定一个两行三列数组,并给他复出。折定一个三行两列的 b 数组,定一行下标,列下标。然后 a 数组与 b 数组行列互换, 接下来输出 b 数组的元数。输出完一行以后,换一行显示另外一行。 接下来我们做一个课堂练习,以下定义。数学语中错误的是这里选 d, 答案 b。 答案表示三列,但是我们这里是三行两 列,不是三列,有三行,每一行只有两列,不是三列。因此一答案错误。 接下来我们布置一个作业,编写程序,打印以下的洋灰三角。对于这个题目,大家一定要善于找规律,利用二维数组来实现。 今天我们的课就到此结束。

下我们学习移位计算器。移位计算器是 library 编程语言中特有的数据传递和存储机制, 它依赖于循环结构而存在。一位计算器存储的是循环结构一个循环周期到下一个循环周期的数据变动,实现数据从一次循环到下一次循环的传递。 library 中的 ev 计存器是多肽的,可以适应任何数据类型。一个循环结构可以同时使用多个不同数据类型的 ev 计存器去存储数据,且数目不受限制。 移位计算器 体现了 library 的核心编程思想数据流,它贯穿 library 编程语言的始终,具有举足轻重的作用。在 library 程序设计中应该非常熟练的掌握移位计算器的用法。 下面我们在循环结构中创建移位计算器。首先创建一个 where 循环, 在循环结构边框的左侧或者右侧右键单击选择添加一位计算器, 这样就会循环结构创建了。移位计存器。移位计存器是由两个小方块组成,这两个小方块分别称作移位计存器的左右端子, 他们平行的分布在循环结构的左右两侧。新创建的移位计算器没有初始化数据类型,两个小方块的颜色为黑色。 初始化数据类型后,左右端子的颜色将变为相应的数据类型的颜色。 移位计算器的左右端子总是成对出现的,在循环结构的左右两侧各一个。每完成一次循环迭代后,数据存储在移位计算器的右端子中。 在下次循环的开始,移位计算器将上一循环存储在右端子的数据移动到移位计存器的左端子 下面为一位计算器,定义数据类型并负初始值。在前面板中创建一个数值空间, 修改一下空间的标签,将输入空间连接到一位寄存器,这样就将一位寄存器的数据类型定义为了该空间的数据类型。由于该空间的数据类型为双精度四点数, 所以移位计算器的数据类型也被定义为了双精度浮点数。现在移位计算器的颜色也已经变为了橘红色, 橘红色就表示负点数。如果修改输入空间的数据 类型,那么 ev 计存器的数据类型也将随之改变。现在 ev 计算器变成了蓝色,当前的数据类型为整形数,整形数用蓝色表示。创建一个加一函数, 将加一函数的输入输出连接到移位计算器,再创建一个显示空间。 修改一下空间的标签,将 vr 循环替换为 four 循环, 设置循环次数为五次。整理一下,乘以框图 保存一下,程序运行一下。从初始之零开始,经过五次累加得到五改变,移位计算器的初始化值重新运行, 累加结果也随之改变。下面从计算机物理内存的角度分析一下移位计算器。移位计算器中的数据存储在哪里呢?毫无疑问,移位计算器中的数据是存储在计算机的内存中, 一位计算器的左右端子是与内存交互的出入端口。实际上,一位计算器左右端子指向同一块计算机的 物理内存,而一位计算器的左右端实现了对这块物理内存的读写操作。 数据从移位寄存器左端子的左接线端或者右端子的左侧接线端进入主开物理内存,在需要的时候,从移位寄存器左端子的右侧接线端 或者右端子的右侧接线端将数据取出。 这里需要注意,移位计算器所对应的物理内存没有设置读写操作的权限,只要有连线连接到移位计算器左右端子的右侧接线端,就可以从这块物 物理内存中读出数据。只要有连线连接到一位计算器左右端子的左接线端,就可以向主卡物理内存中写入数据。如果左右端子的左侧接线端没有连线, library 将向这块物理内存中写入默认数据。所以在编程中要注意保护好移位计算器的写入端口, 尤其是在重叠的结构中,要避免以未计算器的误操作而导致的数据丢失。 我们看一下这个程序,这是一个重叠的事件结构,事件结构中又嵌套了一个条件结构,在这些 重叠的结构中共享移位寄存器中的数据。当前的这个分支中不需要修改移位寄存器中的数据, 所以将移位计算器左端子的右侧接线端与右端子的左侧接线端用连线连接,这样数据又被重新写入了同一块物理内存中,确保了移位计算器中数据的安全。 如果去掉零线隧道中的默认数据,将写入到移位计算器中, 移位计算器中的数据将被修改,移位计算器中原先有用的数据将丢失。移位计算器所指向的物理内存是什么时候建 例子呢?这就涉及到了 library 的编译机制。 library 采用同步编译程序的机制,在程序框图中构建程序代码的同时, library 同步编译程序代码。 当移位计算器没有初始化时, level 并没有为其创建内存空间,因为编译器不知道移位计算器只要保存的数据类型和数据大小。 单位移位计算器初始化数据类型后,变异器就可以根据不同的数据类型在计算机物理内存中为其开辟相应的内存空间。此时移位计算器左右端子将变为与数据 类型相同的颜色,移位计算器所指向的物理内存正是在此时建立的。当然,也可以通过函数的接线端子去初始化移位计算器。 那么什么时候这块物理内存被注销呢?实际上,当 vi 关闭时,操作系统将收回移位寄存器所指向的内存空间,移位寄存器中的数据将丢失, 所以当关闭 vi 时,移位寄存器所指向的物流内存将被注销。 在如图所示的程序中,一位计存器的数据类型为双精度负点数,所以 level 用在内存中为其开辟 八个字节六十四位的存储空间。我们假设这个一位计算器所指向的内存单元 v a。 程序启动后,首先在 vr 循环外部通过数值输入空间为一位计算器负初始化之零,也就是通过一位计算器左端子的左侧接线端向内存单元 a 中写入数据零。 每个循环周期 level 右,通过移位计存器左端子的右侧接线端从内存单元 a 中读出数据, 经过加一运算后,通过移位计算器右端子的左侧进行端, 将数据重新写入内存单元 a 中,这样新数据就覆盖了旧数据,执行完所有的循环迭代后, 通过移位计算器右端子的右侧接线端从内存单元 a 中获取数据到显示空间中。

今天我们看例六点四,将一个二位数组的行和列互换,我们看矮数组,两行乘以三列, 第一行是一、二三,第二行是四、五六。 b 数组三行乘以两列,一四二五三六。 那么我们看呢,他这个结果呢?就是,嗯, b 的 第一行第零行,第零列,那么和这个 a 的第零行、第零列是一样的, b 的第零行第一列,也就是零一,那么他其实是 a 数组的 一零也相当于 a 的下标和 b 的下标正好是交换的,我们相当于把 a 结付给了数组 b g i。 那比如说 a 数组里面的五,他是 a e e, 那么在 b 里面呢?他是,这是第零行,这是第一行,第零列,第一列, 那比如说六是 a 一二,这是零一二,哎,一二,那么 b 里面的是 d, 零一二等于 a, 二一正好是把 b g i 等于 a i 接,也就是把 a i 接这个数组的值付给了 b g i。 我们看程序的写法, 首先定义了 a 两行三列的一个速度,然后定义了 b 三行两列的一个速度, i 和 j 分别控制是行和列。那么在定义 a 数组的时候呢, a 二、三分别复制为第一行是一、二、三,第二行是四、五、六,那么它的行号是从零开始的,列号也是从零开始的。输出一个 这五串速度也是啊,腹部循环, i 等于零, i 小于二, i 加加 i 同零一丢换两次, 等二的时候不循环接等于零接小于三接加加接的循环,下标是零一二循环三次打印速度, a 接的值 相当于把数组输出,然后呢,每输出一个,就把 aij 付给 bgi, 然后把音一行换行,换到下一行输第二行 按的话,这个复循环,他完成了 a 处组的打印,并且把 a 处组的值付给了 b 处组, 最后打印 b 数组, i 控制行数,三行 接控制列数,两列打印艺术组的值,然后也是一样的没打印, 拉一个挨的循环又换行,因为行数是二啊,每一行是两个数, 打印两个数就换一行,这是控制完接之后挨着纸点一次打印一个换号, 这个完成了 b 数组的输出,然后等于结束。执行一下这个程序, 看一下结果, a 数组制 一二三四五六, b 数组是一二三四五六,但是这个里面呢,是应该多加一句话啊,打印的是 b 数组, 然后这样我们看程序的时候呢,更清晰一些, 执行这个程序,看下结果, a 数组呢是一二三四五六, a 数组呢是一四二二五三六, 这样的话呢更明明了一些啊。

来看二位速度的定义和使用啊。 来,我给大家做一个啊,速干为速度。 嗯, 好了,来我们还以还以 k v 的形式给大家做个二维测试。 s 零零幺是吧?斌子张三 啊,简单点吧, s 零幺对应 a a a 没别的意思,为了简单啊,直观啊。 b b b 啊 s 零零二 s 零零三 c c c 好了,这是一个异味速度。 来,各位,我们的二维速度啊。哎,我们的二维一维速度还可以这么定义是吧? a 二是个空速组,好理解吧。 a 二是个空速组。那空速组我也可以复直。 我以什么方式复制?我以 key value 方式复制。不带这个的带这个的啊,带这个的是吧?我 q 哦,来,给你来一个。 嗯, 注意我这里是个整数是吧?哎,来做串吧还是 这个 k v 它这么写了是吧?上个 k v 是这么写啊。啊,这叫 k 叫 v, 我是可以这么写啊,没问题吧 各位这种写法其实那下标跟这种写法是一模一样啊,没问题吧? 等于三三三好了, 这是第二速度是吧?有没有问题?没问题吧,再弄个速度三 各位,有速度三我直接给啊 数三我这个这下标数整数吧。五五五等于五五五有没有问题?没问题吧?这种写法是学过 六六六 行了,我就两元素。 这都是一位速度,没有问题吧,只不过定型的方法跟以前有区别。我们以前的方法呢?下边零一二三四五六七八九是顺下来的是吧? 你看这个下边这个 k 是我们自定义的 k 是吧?啊注意这么定义是没有问题的。那么这是你可以把记住这么一个语法,那如果有问题的话,你一编译就错了是吧?另外,打开一编译就错了 啊。这是一种写法,各位。这是这种写法是没有问题的。 没有问题是吧?有问题是早报错了是吧?好了,这都是三。这叫三个 e v 速度,分别用这三种形式定义。定义 没混吧?跟那个前面的类似是吧?那我再定一个二维速度, 他的每个元 宿舍是谁呀? 呃,美元素是 a 一二 a 三美元素。好了,大家看这种方式啊,你不能。嗯,用 for 循环了,得用 fore 意识来迭代是吧? 先迭代谁要外层,再迭代内层是吧?先迭代这个速度 x, 它有个 k y 六是吧?嗯,那么我们就用刀的 k 一 v 一 到了 v 一啊。这外层。内层我们到了 k 二 vr 是吧?内存还有一个循环是吧?一个拷贝啊。说大家恋人有技巧,我允许拷贝黏贴,你现在就可以拷贝黏贴啊,只要求你快和准啊。 那层是不是他了?不是的是吧。那层的速度怎么是他变成 k l v 二。那层速度是谁呀?各位。 内存的速度是刀的唯一是吧,对吧?内存的速度是变成刀的唯一了。能想象出来吧。 因为你想是他的每个值,他的每个值是不是都是个一位数组啊?所以说他这个数组,他的每个数组数都到了唯一啊,能理解吧。 给你想个他二位速度,每个瓦流,每个瓦流是多一位速度啊,而且他是个变量,所以他每个速度内层是 v 啊。但是你这个 k 二 v 二,你这个东西 k v 一不能再引用了,你再定义的他的键得变成 k 二 v 二了啊。 好,我先打这个内层是吧?再打赢外层啊。 打印内层的话,其实打印 k 打印 k 二 v 二的值是吧?啊假设我只打印 v 二的值啊, 到了 v 二对吧?那么为了好看,我们加什么空格是吧? 加三空格每循环一行之后要加什么?换行是吧? b 二二行 好了,走哎,哪做错了? a r r l y 嗯, 那个这个侄女下面啊。 a 一万是吧?走 为啥这有五五,第三个这没满呢?第三个是只有两只啊。好,我们开始把它做成表格形式是吧?做表格形式更漂亮是吧?做成表格形式,那你那个表头写的可以写到外边是吧? table 包的等于一啊,宽度等于五百啊,包的等于一,没错吧然后这个表格在结束是吧? 然后你这是可以做成单元格形式是吧?啊循环单元格形式。那你外层循环的是什么?行 是吧?你输出一个 tr 是吧? 你这个就没必要要了是吧?对吧?内层呢?循环成什么列是吧?列列的话,那你这个两空格就没必要要了是吧?内层打印的是提地开始 直夹在中间是吧? t 结尾啊 这这幅这这这个这东西没有啊,因为我们现在只有两只啊,所以你这没有单格是吧?没有单格啊。好,那这个例子给大家拷 立下来啊! 这地址要考虑下来。

大家好,我是逍遥大魔丸。我们今天继续来讲解 c s p 八股系列的指针与数组。第二节今天的内容是二维数组的指针访问。 嗯,我们先来看一下二位数组的最基本的访问方式。 嗯,老师重新定义一个二位数组啊,这是代表我们定义一个五行两列,三行两列吧,五行有点多啊。 现在我们定义了一个三行两列的这样的一个数组。那么呢,我们使用最基本 最基本的,也就是元素的方式进行访问。这也是我们学所有同学学习二位数组时啊学习的第一方法啊。很简单,两重双重高循环啊。外面呢是代表行,里面是代表列,所以外面是三行,里面是两列。 嗯,同样我们用这个 skif 来进行数据的读取 啊。读取完事完毕之后呢,我们开始来进行一个输出 啊,读取的时候别忘了加趋势符啊。输出的时候呢,我们在每一行的时候进行一换行。好,我们现在 来测试一下啊。最简单来测试一下啊,三行两列。那么输入这样的数据 六五四三二一,按照三行两列来输出啊。输出结果是六五四三二一,我加个空格啊, 六五四三二一已换行。嗯,好。这就是一个非常非常基础的一个呃用元素的方式来进行访问的。好。我们现在想一个问题啊, 其实让我们可以把二维数组的每一行呢,当成一个一维数组对不对?那么如果他的每一行是一个一维数组,那么这一行的开头的那个元素就是这个一维数组的数组名 对吧?我来简单画一下这个图啊, 二位数组,那么很明显它的每一行都是一个一位数组啊,这是一个一位数组。那么我们比如说写成这个是 a 零零, 内框收宽点啊, a 一零, a 零零。这个呢是哎,不够棒。再 哦,这是 a 零零,那么下一位呢?是 a 零一, a 零二 二零三。 再往下呢,分别就是变成了 a 一一, a 一啊, a 一零, a 一一, a 一二和 a 一三。对吧,这个变成了一 颜色,其实我们不用颜色来标。 那么我们单独来看每一行呢?这就是一个独立的一位数组,对不对?那么这个独立的一位数组,他的数组名是什么呢?那很明显就是这个东西 a 零。 这个 a 零呢,就是它在每一每一行上的这个一维数组的名字。既然它是这个数组的名字,那就说明我们还可以 用这个数组行数组名的方式来进行访问。好,现在我看一下我们怎么用行数组名。想想我们昨天在一维数组的时候,我拿着一维数组的名字是怎么样来进行访问的。 对,直接加这个接对吧。那我们来看一下,既然它是数组名,也就是说明它是一个地址,那么这个地址在读取数据的时候就不用再加趋势符了。那么它的写法就这样怎么写呢?不用不加趋势符啊,那就是 a i 加减。 因为你是一个名字,你是数组名,那么必然决定了你就是一个地址。那么地址在加接之后,他直接指向下一个连续的这样一个地址。所以啊,他就是一个正确的读写方式,和我们依维的读写方式非常非常的类似 啊。当然在这里呢,我们要给他加上一个呃左值结引用,把这个数值给打印出来啊。同样呢,我们还是用这这一组测试数据 逆行啊,看我们的结果正常输出了。也就说我们可以使用行数组名的方式来进行读取啊,这就是使用行数组名的方式啊。 a r r i 加接 好,我们继续进一步的思考啊。那么对于一个二维数组,我们实际上还可以把它压缩成一维数组。那怎么来理解呢?这样来理解 我是一个二位数组哦,我是一个一位数组。现在呢,我把二位数 看成一维数组,那每一个一维数组里面的每一项呢?他又是个一维数组,对不对?我们是不是可以这样来理解哦,这就是我的一维数组啊, 我可以把我整个的这个二位数组看成是一个一位数组,那么一位数组里的每一项又是什么?又是一个一位数组啊。这样来理解这个问题。那所以说呢,那我既然我是一位数组,那我整个数组名是不是就是我的 什么呢?就是我的整个地址吧,对吧?我的数组名就是我的地址。那么再想象一个问题啊,那我的里面的每一项怎么来表示呢? 啊?是不是用我的数组名加上我的这样的一个跨度啊?那么这个跨度是什么呢?比如说我现在啊里面。呃,其实我也我写的更严格,更标准一点,应该这样来写啊,它是代表了 a 零到多少呢? 嗯, a 零一 a a 零零到最后一项吧, a 零零到。我说 a 零 n a 零零到 a 零零,这是我里面的每一项对吧?这个没有问题吧?啊,下面也是一样,老师就不浪费时间去写了。呃,这还写上吧, 我还是把这个给你们画一下啊,让大家彻底理解。 哦。这样我表示的就是啊,我整个是一个一维数组,那么一维数组里面的每一项呢?又是一个一维数组,老师用这样一种方式啊表示,看看你能不能看懂啊。那么既然我是一维数组,根据我们昨天学的一维数组的这个呃,一些知识知识我们能知道。那么整个的这个数组名 a 就是我的当前的手递纸,对不对?那如果你是我的手递纸了,那么我对你进行一个一个指针的移动,那他指向的是谁啊? 啊,这个要搞清楚啊,我的每一次这个指针的移动,他指向的是这个地址的变化。最初的时刻呢,我指向的是这个这个位置。咦,怎么没插进来呢? 最初的时刻,我指向的是这个位置,对吧?我我 a 加零肯定是指向了我的首元素嘛,你整个是我首元素,那么 a 加一指向的就是这一个元素了。 a 加零 啊,我写在这啊,在这 a 加零指向的是我的首元素,那么 a 加一指向的是我的下一个元素啊。这个同学不太好理解的话,老师再画一个图,如果他就是一个真正的意味数组呢? 他就是一个真正依维数组。这是第零项,这是第一项,这是第二项,这是第三项,这是第四项。是不是就很容易理解了?那我 a 加零指向的肯定是你, a 加一肯定指向的是你,对不对?这是我们昨天依维数组的知识吗?好, 那么在这个角度上,我们切换一下,再来切换一下这个笔,有点套娃的意思啊,比较绕啊。那么我 a 加零肯定是指向了我第一为的第一个元素, 第一个元素的那个。呃,整个第一元素的这个名字是什么呢?啊,上面我们刚刚讲完他的第一位这个数组名是 a 零。因此啊,在这里我们得到一个重要的结论,那就是 a 加零这个地址对他进行。 这个 a 加零,它指的是哪个元素?我们对它取值之后,它这个对它节俭用之后啊,那它这个值实际上就是我们上面说的这个 a 零。大家想想啊。首先这个 a 零 a 一、 a 二、 a 三 a 四,这些东西是我的元素对不对?他在我,他如果把我们把整个二位数组看成一个一位数组,那么他就是我二位数组当中的每一个元素。那么我拿着当前我的数组名对这个地址进行节引用之后,那他必然指向的是我这个元素值是吧?啊,比如说这个这个 这个,我们依维数组,假如数组名是 a, 那么我 a 加一, a 加零,指向的是这个每个元素地址。我仅引用之后,是不是就指向这个数组的真实值啊?那它值是零一二三四,那对于我来说,我的值就是 a 零 a 一 a 二, a 三 a 四 啊。因此,在这里我们可以使用这个原数组名加上这个。呃,加上这个是偏移量,这是 i 偏移量对吧?从上到下,我们称之为 i。 加上 i 偏移量之后 后的结已用取到了 a 零的这个地址。那么再回过头来看啊,我们拿着这个 a 零,是不是又可以对它进行啊?在这里拿着这个 a 零对这个 ai 进行一个转换,就能取到一个真实的数值呢。 啊,这个就是用数组名的方式进行读取啊,稍微有一点点绕,老师给你写一下。什么意思呢?首先我要用 i, 用 a, 用数组名来加 i。 接着呢,将它进行取引用,那么它指向的就是刚才我们数组的那个名字, 他指向的是第一尾的名字这个东西啊,指向的是第一尾的名字,那么第一尾的名字再加上这个接呢,是不是又回到了刚才我们这样这样的一种情况。这是这是名字,他加上接,就指向了下一个连 序的数字啊,这样这是 a 零零,这是 a 零一,这是 a 零二,这是 a 零三啊。用这样的方式来进行了一个呃,通过数组名进行了一个,进行了一个跳转哦。那么读取的这个基因呢?就是我们最终的一个数,那个地址。 那同样在打印的时候,我把整个这个数值进行一下转换,就和我们刚才的这个呃呃,刚才用数个行数组名的方式其实一模一样的,我们只是把哪替换了,把这个东西替换了,他就是刚才我们那一步当中的这个行数组名。好,现在来试验一下 啊,六五四四三二一啊。看这一次我们也正确的输出了这个啊每一项的值。 所以呢,这种方式是我们使用数组名的方式,使用数组名的方式进行偏移啊,进行节引用,把我们这个地址读出来。需要理解的就是我用数组名加 i, 它指向的是什么呢?指向的是我们这里面的首元素 啊,指向的首元素的这个名字啊。好。在学习了上面的三种方法之后啊,我们现在来讲解第四种方法。第四种访问二维数组的方法叫做行指针。好,我们先来定义一个行指针啊。 行指针的定义方式很简单,首先呢,是 inter 类型的,然后呢,需要,因为它是指针。我们需要将这个指针运算符和我们的倍联名结合在一起啊,用括号括起来,保证它优先运算。那么接下来,呃,很重要的就是我们需要 要指明他的一个指向数组的一个列数。就说你这一个数组你有多少列,这就是一个最简单的一个行指针啊。我们这里是有三行两列,那么我在这个位置要指明他是指向一个两列的啊,两列的这样一个数数组 啊。这个有关行指针呢,很多机构啊,或者老师都说他是一个指向一维数组的这样的一个指针啊。但实际上这个东西并不准确。 因为我们几乎啊用从来不用他去指向一位数组啊,他的目的是指向二位数组的某一行。 因此啊,这个才是行指针的真正的用途啊。它是指向二维数组当中的某一行。如果我这样来写呢。啊,如果我这样来写, 那么他其实就是指向三维数组当中的啊某一个单元了啊。称这这个时候称为一行可能不是特别的合理啊。啊称为三维数组当中的某一个单元。也就是说他指向的这个数组实际上要比你当时当前显示出来的数组多一维啊。多一维 好。三位。这个我们不讲啊,略有点复杂,我们直接看二位这个。那么既然他就他这个叫做行指针,他指向的数组当中的某一行,那么他的作用就和我们前面讲的这个啊,数组名啊,还有说行名啊,是一模一样的。他其实指向的就是第一行 啊,指向那一行。那么那一行的这个地址呢?就是就是。呃,这个二维数组这一行的名字就是他的地址吗?对吧?因此,他其实在很大 大程度上是等同于我们前文讲的这个 a 零了。还有这个 a 加 i, 他们几个的概念是一模一样的。那么现在我把这个 p 进行复制啊,复制的方式也很简单,直接等于 ar。 这样的话,我就相当于把数组的第一行 复制给了他。那么在使用他的时候呢?他和使用数组名那是不是一模一样啊?我直接替换掉啊,直接把这个数组名替换成这个指针,替换成这个行指针啊。我们再来验证一下 啊。那么结果就是六五四三二一啊。看,我们也得到了一个正确的结果啊。这就是二维数组的四种方位方式啊。有些同学可能就会比较懵啊,之前呃,在没上这没上我的课之前,会 我们看到一个呃,表达方式不知道怎么去读取啊。那么相信通过我的课程,应该把这几个问题给你解释清楚了。 嗯,好,到这里我们就把二维数组的四种访问方式全部讲解完了。老师现在再来总结一下,因为这个地方就确实比较复杂。第一种方式用最简单的是什么?我们的这个,呃,最简单的方式就是我们的数元素名的方式。那么这么来写, 那么元素名的方式就很简单了,是 a 屈指符啊,一定要屈指符。因为我们二位数组当中的每一项都是一个元素, 它是一个变量啊,所以说我们需要对这个变量进行取址。 a i 接这是第一种方式,大家看一下啊。 方式一使用元素名 方值二呢使用行名。我们就是把数组当中的每一行当成一个独立的一位数组,那么前面这个 a 零 a a 一 a 二就是它的行名。因此我们使用方式是这样的。 记住啊,一提到这个数组名,那么它必然就是一个地址了,因此不用再去加额外的趋势符 h。 二使用行名。 那么就这样来用 a 零 a 零就呃 ai 啊, ai 就是我的这个行名。那么下面就是直接这样加 i, 加 i 是指向这一行的连续的下一个元素,下一个地址啊, 那么呃读取数据的时候要加上这样的一个取值符啊,要要加上,不是加取值符啊。啊,说错了,加上这个左直接引用。 这是使用行名。第三种方式呢,使用数组名。那么要知道使用数组名,那就是把整个二维数组当中的每一维都当成了一个独立的约束,那么整体把二维数组看成一个一维数组。 那么在这里呢啊,那我的我用我的这个数组名,再加上偏移,这那就是指向了每一行 纸上的这个每一行呢,就是我们这个行名,所以它的使用方式和我们行名非常非常的类似啊, 这个是。使用方式三使用数组名 使用数组 meal 啊,那么 我们数字当前是 ar, 那么我们把它进行加 i, 注意加 i 之后取的是每一行第一个元素的地址,那么我要把它转化成值,要用加加这个符号啊,加这个组织建议用 看一下。那么这样的方式转换完之后得到的是什么?得到是这个 a r r i 得到了每一项的行名啊,用这样的方式得到的是每一行行名。那么最后呢?我们在读取的时候要把整体进行一个结引用 啊,这样的一方式。这就是方式三使用数组名。方式四呢?使用叫行指针。 使用行指针。好,现在老师把这四 方式全部列到这里了,同学们可以自行对比啊。嗯,下节课的内容呢,我们将讲解啊如何对一个函数进行数组的穿餐。好,今天内容就到这里,谢谢大家。

动画学算法将二维数组转换成一维数组,这其实是一道简单的找规律的题目,我们来看一下。首先在慢函数中定义了一个三行系列的二维数组,并对他进行了一个初始化,该二维数组对应的逻辑模型如他右边所示。 接下来我们标示出这个二维数组的行号和列号。第零行,第一行,第二行接的是第零列,第一列、第二列、第三列。请注意数组的所以下标都是从零开始的。 我们要将该二维数组转换成一个一维数组,就需要定义一个与该二维数组相同大小的一维数组,这个一维数组里要能容纳十二个硬度型的值。一维数组的下标从零开始到十一结束。接着一, 将二维数组里的每个元素复制到一维数组中去。比如二维数组中的第零行、第零列的元素复制到一维数组中的第零个元素,二维数组中的第零行、第一列的元素复制到一维数组中的第一个元素。 依次类推下去,接下来我们看一下这里的一个快速的动画演示。最后二维数组里的所有的元素都复制到了该一维数组中了。 这里我们将二维数组的锁引与一维数组的锁引转换关系给列举出来了,仔细观察你会发现其中有一定的规律。 二位数组的 di 行的接,列的元素与一位数组的所引值 k 之间有这样的一个公式关系, i 乘以列数加上个接,就是对应的一位数组的所引值 k。 比如二位数组中的第一行、第一列 的元素,它对应的一维数组的所引就是一乘以四加上个一等于五,也就是表示该二维数组中的这个元素放置在一维数组中的所引为五的位置上。 同时需要注意一下的是,这里二位数组的列数是四而不是三。以上就是这道题目的最核心的思路了。接下来我们给出具体的 c 加加代码实现。 首先这里定义一个三行四列的二维数组,并对它进行了初始化。接着定义一个一维数组,该一维数组的元素构数与二维数组元素的构数一致。 通过 size of number 除以 size of number 零零可以计算出该二维数组里的元素构数。同时对该一维数组进行部分初始化,将该二维数组里的所有元素都初始化为零。 接下来需要通过两层循环去便利二维数组中的所有元素。第一层,循环控制二维数组的行数,所以这里的循环变量 i 是从零开始的,条件表达式是 i 小于三,这里的三是二维数组的行数。 第二层,循环控制二维数组的列数,这里的循环变量接是从零开始的,条件表达式为接小于四,这里的四是二维数组的列数。 接着在内存循环的循环题里,就是这道题目的最核心的代码了。二位数组的 d i 行的接列的元素复制给一位数组的所引为 i 乘以列数加接的元素,这就是我们刚刚推导出来的规律, 这里我们通过代码去实现的这个规律。最后我们再通过一个 for 循环,将异味数字里的元素全部打印出来,看一下是否转 换成功。按一下 f 十一编译运行下当前的代码,看一下最终的运行结果,在终端当中我们看到显示出来了一二三等等等,一直到十二这里也就是代表转换成功了。 以上就是这道题目的 c 加加代码的实现,如果你还有什么疑问,评论区留言,如果你想要视频里的同款原代码,评论区留言口令,六六六,我们下一个视频再见。

大家好,欢迎收看由三 e 电子工作室推出的 level view 与数据存储系列实战视频教程第零一篇数据库存储,今天我们接着讲第六章 level view 与 access 数据库的连接。 上一节课我们给大家讲了基于 o、 d、 b、 c 使用 d、 s、 n 连接到数据库这一节课呢,我们再给大家讲一下基于 a、 d、 o 使用 u、 d、 l 连接到数据库, 使用 udl 连接到数据库啊,比使用 dsn 连接到数据库相对来说呢会简单一点,相当于是这三个方法啊,是一个比一个简单。下面呢我们就看一下具体的操作步骤。第一步呢,我们就双 双击打开我们的莱博威欧,大家注意啊,打开我们的莱博威欧之后呢,我这写了一个比较粗略的图文示意图,大家在底下如果说忘了操作步骤的话呢,可以看一下我们这个提供的这个 ppt 上的这个操作步骤。 我们打开 level v 有之后,打开 level v 有之后,我们点工具点工具,这呢有一个 create data link, created link 当然也可以啊,你新建一个 vr, 新建一个 vr 之后呢,这个工具里啊,也有这个 created link。 在这个前面板跟程序框图面板呢,都可以,都可以, 比如说你一打开 level v u 的时候,用这个 credit link 也可以,新建 vr 的时候,在前面板跟程序框图面板都可以选这个 cred d link, 我们随便选一个就选这个 credit link。 我们选了之后,大家注意啊,选了之后会弹出这样的一个提示框,会弹出这样的一个提示框, 对于老版本的这个数据 access 数据库文件,就是以这个点 m、 d、 b 结尾的数据库文件,我们选这一个就可以,就 microsoft jet 四点零 o, l, e, d, b provide provide, 选这一个 对于新本本的,对于新本本的数据库文件,就是以这个点 a, c, c, d, b 结尾的数据库文件,我们呢就选第二个,选第二个,第二个,这个, 这个第二个,这个选项啊,既支持老版本的,也支持新版本的,所以说呢,我们一般呢就选这种兼容性比较强的这个选项。 可能有的学员啊说,哎,老师,我这只能看到这第一个选项,这个第二个,这 microsoft office 十二点零,这个这个 access did base engine, 这这个选项我电脑上没有打开,这呢是一个非常非常注意的一个地方,非常非常关键的一个地方, 如果说你这个选项没有的话,你需要安装一下这个数据库引擎。 access database n 展按 二零一零,你需要安装一下这一个数据库引擎,大家注意啊,没有这个选项的话,我再强调一下,没有这个选项的话,你需要安装一下这个数据库引擎。 这个数据库引擎呢,我们的教程里给你下载好了,放到了这个课程中使用的软件工具汇总 这个数据库引擎,这个地方,第一个 access date base engine, 这一个呢就是这个数据库引擎,数据库引擎 你需要安装一下他,安装一下他,你的呢电脑就会出来这个选项,安装了之后呢,你重启一下电脑,再按照我们的操作步骤,他就能看到了这个选项。大家注意,这是一个非常重要的一个地方,如果说没有这个呃选项的话,你就安装一下这个数据库引擎。 好,我这呢就不给大家重复安装了,安装了之后呢,我们就出来了这个选项,出来了这个选项,然后呢我们点下一步,点下一步, 点下一步这个地方呢数据园这个地方呢就让你填写你的这个 access 数据库文件所在的位置所在的位置,比方说 我们要连接到这个 ae 点 accdb, 我们要连接到 ae 点 accdb, 我们怎么办呢?就填一下这个 ae 点 accdb 所在的文件位置就可以了所在的文件位置,那么我们怎么知道一个文件所在的文件位置呢?大家知道不? 大家不知道的话呢,可以百度一下,这样呢我教大家一个简单的方法,右键这个文件点属性,点属性,这样呢他就有一个位置,他有一个位置,我们复制一下这个位置,复制一下这个位置 好,复制好了这个位置,这个位置呢只是这个文件所在的文件夹的位置,我们是不是还得输一个这个英文格式下的斜杠,然后再输上他的名字啊? a 一 a 一点 a, c, c, d, b, a 一点 a ccdb, 好,这个呢我们就把他的完整的路径给他输入完了,这呢一定要输入他的完整的一个路径,就是桌面下的 a 一点 accdb。 好,我们输完了之后呢,我们可以点一下这个连接测试,点一下这个连接测试,你看 连接测试代表呢是连接成功,连接成功,我们点确定,然后我们再点确定,再点确定之后,你看他会弹出一个框来,让你保存一下我们生成的这个 udl 的文件,比方说我们就这样呢,就保存到桌面上来了, 我们给他随便起个名字啊,这 udl 起名倒无所谓了,比方说我们起个名字叫一吧,对不对?叫一,然后我们点确定,点确定,你看呢他就提示啊,成功的创建了这个 udl 的文件,创建了之后呢, 你看在桌面上啊,就形成这样的一点 udl 的一个文件,那么我们怎么调用这个 udl 文件连接到我们 ae 点 accdb 这个数据库,呃,文件上去呢,我们在这个程序框图面板啊右键,大家注意啊,右键, 我们选这个互联接口 database, 还是呢选这个 open connection, open connection, open connection, 我们右键这个 connection information, 右键,然后呢创建输入空间,创建输入空间这个地方呢,是让我们选择选择这个路径的,选择这个路径的, 我们选择呢我们创建的这个 udl 文件,然后我们选择一下,选择一下之后呢,我们这样呢可以这个错误输出呢,我们也可以创建一个显示空间, 创建一个显示空间,好,我们这样运行一下,只要呢跟不报错,说明呢,我们就已经连接成功了,我们运行一下,你看运行一下没有报错,说明我们就连接成功了,对不对?这个呢是没有密码的,这个 啊,新版本的数据库文件的一个 udl 的创建,下面我们再创建一个有密码的这个 啊再次数据库文件的连接,这个有密码的怎么搞呢?步骤也是非常类似的,只不过呢是增加了一个密码设置的一个步骤,我们点工具 credit link, 然后呢我们选第二个,就 microsoft office 二点零这个,然后点下一步, 然后呢这个数据员呢,还是填写你要连接的数据库的啊?文件的位置,我们右键属性复制一下这个位置,复制一下这个位置, 然后粘贴一下,然后呢英文格式架斜杠,然后呢输入 a 二点 a, c, c, d, b, a, 二点 a, c, c, d, b, 然后呢这大家注意啊, 这如果说你点连接测试的话,他就连接失败了,对不对?是因为咱 a 二点 accdb 有一个密码,有一个密码,我们这个密码怎么设置呢?大家注意啊,这也是一个非,这又到了一个非常关键的播放了 我们的密码,不要在这个地方设置,不要在这个地方设置,你在这设了也没用,并且呢也连接不成功,我们点这个所有,大家注意啊,非常关键的步骤,点所有,然后呢如果说你可以拉的这个显示的全一点,我们选这个, 选这个选项, database password, 这个地方大家注意啊,选这个选项, database password, 双击双击, 然后这里面呢输入你的密码,输入你的密码,咱这当时设的密码是一二三四五六,对不对?我们输上一二三四五六,好,输好了之后呢,我们点确定好,点了,确定之后呢,我们就把密码设置完了,设置完成了之后呢,我们再连接测试一下,看看设置的密码有没有问题。 我们点这个连接选项,点这个连接选项,然后点测试连接,点测试连接,你看他啊,测试连接成功,说明我们这个地方设置的这个文件, 嗯的位置跟设置的密码呢,都是没有问题的。如果说这个地方啊,这个文件的位置跟或者是这个文件的这个密码有一个地方设置错了,他呢就不能够连接成功。比方说这个地方,我双击双击修改一下密码,比方说一二三四五六七写上点确定, 然后如果说你再点连接测试,他就连接失败了,对不对?连接失败了,我们呢再把这个密码给他改回来,改成一二三四五六,然后再点连接测试,你看这就没有问题了。 好,我们全部设置正确之后,全部设置正确之后再点确定,点确定,然后呢他会提示你保存你生成的这个 udl 的文件,我们把它放到桌面上,给他起个二,然后点确定,然后呢点确定,然后在桌面上呢就形成了一个二点 udl 的一个 啊文件啊,如果说我们想连接这个 a 二点 accdb 的话,我们只需要调用这个二点 udl 这个文件就可以了,我们再连接测试一下,再连接测试一下啊,连接测试一下,我们这个地方呢就选择这个二点 udl 文件选了之后呢,我们运行一下,运行一下,你看 只要不报错呢,就说明我们成功的连接了这连接到了这个 a 二点 a c c d b 这个 access 数据库上去了。如果说这个地方你给他重命名一下,把这个文件的名字啊给他变了,变了之后呢,你再运行呢,他就报错了, 大家可以看一下,可以看一下,你看你运行呢,他就报错了啊,因为咱们刚才设置这个 udr 的时候呢,链接到的是这个 a 二点 ecdb, 这个文件上去,你给他重命名了,他就连接不到,连接不到,连接不上去了,对不对?所以说呢,他就报错了,你这个地方如果说你再给他改回去, 给它改回去这个地方呢,它就没有没有问题了,你看是不是好,这个呢就是咱们利用这个第二个选项, microsoft office 十二点零 a c c access date base engine 这个选项呢, 连接到这个新版本的数据库文件,带密码跟不带密码的一个操作步骤。对于这个旧版本的数据库文件呢,旧版本的数据库文件,我们这个地方呢, created link 这两个选项呢都可以,都是可以选择的,都是可以选择的,这样呢我们就分别给大家演示一下。 对于这个第一个选项呢,第一个选项我们选了之后呢点下一步这个地方呢,就是选择这个,呃,文件的位置,选择文件的位置,这个地方呢还有一个快捷方式,我们点一下, 然后呢就选这个,比方说你看他呢就只能够显示这个旧版本的数据库文件,我们选择他,当然呢这样呢,你也可以跟咱们刚才一样啊,手动的把这个文件的位置输入上去也可以,然后呢点连接测试,你看呢就能够连接成功,我们点确定呢,就能够生成这样的一个 udl 的文件,比方说我们这样呢写个三,写个三,你看呢这样呢就成功的创建了这样的一个 udl 的文件, udl 的文件 看带密码的情况呢,也是类似的,带密码的情况也是类似的,比方们选这个选下一步,然后呢选择,比方说选择 b 二这个数据库文件,然后也是在点这个所有这个地方, 所有这个地方点这个 database password, 在这个地方设置密码,设置六五四三二一,然后点确定, 点确定,然后点确定之后呢?你在这可以点一下测试连接,然后点确定,然后呢再保存一下我们的这个,呃,比方说保存一下,写个从写个名字叫四吧,四点这个油碟啊,我们刷新一下,你看就出来了。如果说想测试一下我们生成的油碟二,对不对?比方说我们这样呢?改成三, 改成三对不对?我们这样呢?改成三好,改成三之后我们运行,运行一下,你看到没有报错,对不对?然后再改成四,改成四,你看再运行一下,你看也没有报错,说明我们生成的这两个文件都没有问题,对不对?没有问题。好,对于这个旧本本的这个 数据库文件呢,这个我们是给大家演示的第一个选项,对于这个第二个选项呢,也是类似的,比方让我们这样呢选第二个选项,点下一步这个数据园,这个地方呢,我们这样呢,他就没有快捷方式了,没有快捷方式我们就只能手动输入了, 手动输入我们复制一下这个文件的位置,往这呢就相当于一些重复操作了,重复操作再带领大家呢复习一下,复习一下,我们点斜杠,英文格式下的斜杠,输入这个 b, 一点 a, 这个不是 a, c, c, d, b 了,对不对?应该是 m d b 了, m d b, 然后呢这儿呢?这个第一点 m d b 呢?没有密码,我们点连接测试,你看也是连接测试成功的,对不对?我们点保存一下,保存一下,保存到桌面上,比方给它起个名字叫三一,然后点确定,你看 这样呢就成功了,比方说我们这样呢输入三一,看看能不能够哦连接成功三一,然后点连接好,你看没有问题,说明呢,我们成功的连接了这个 b 点 mdb 的这个数据库文件上去。 好,这个呢就是利用 udl 连接到这个 access 数据库的一个操作步骤,操作步骤哦,这呢是有两个选项的,对于旧版本那只能够可以选择这个四点零的,也可以选择这个十二点零的这两个选项。 对于新版本的这个数据 access 数据库文件呢,就只能选择这个十二点零的。如果说你的电脑没有十二点零的这个选项呢,你需要装一下这个数据库引擎,对于有密码的这个数据库文件呢,有这个 密码设置的这样的一个选项。好,这呢是需要两个注意的地方,一个呢是这个数据库引擎,一个呢是这个密码的设置,对于这个数据库引擎呢,如果说大家没有购买教程的话呢,可以到这个地址上进行下载。 在课程的最后呢,我们再给大家课外拓展一下一个小的知识点。到这呢我们给大家讲了用两种方法连接到 access 数据库, 一种呢是利用 d s n, 另一种呢是利用 u d l。 我们给大家讲完了这个操作步骤之后呢,我们在 level view 里啊,利用这个 open connect 函数啊, 给大家测试了一下,能否正确的连接到我们的这个啊相应的数据库上去,我们呢可以打开我们,嗯,这两个,嗯写的这两个范例程序,写的这两个范例程序大家可以看一下啊,可以看一下, 这个呢是利用 dsn 连接到数据库里的一个测试范例,就是说测试一下能不能够连接到我们相应的数据库,这个呢是利用这个 udl 连接到我们的这个奥克赛斯数据库的一个测试范例, 大家可以看一下这两段程序有什么样的区别,他们这呢都是调用的这个 open connection 的这个函数, open connection 的函数,这个 open connection 这个函数的有一个输入呢,叫做,大家注意啊,叫做 connection information, 这个输入就是这个函数的一个输入,叫做 open connection。 但是呢,我们这儿利用 d、 s、 n 的时候呢,我们这个 open connect 的输入呢,是一个字符串儿,而利用这个 u、 d、 l 的时候呢,我们这儿的这个 open, 这个 connection information, 这的数呢是一个路径,是一个路径,大家看一看同一个 vr 函数的 同一个这个输入,结果连接了两种不同类型的输入,两种不同类型的输入,这个是为什么呢?这个呢就是来波微友的一个特性,叫做多肽的特性,多肽的特性,多肽的特性呢,是指 一个 vr 函数的某一个输入,可以呢连接两种以及两种以上的不同类型的。这个 啊空间,比方说我们这个 open connection 这个函数,这不有一个 connection afore me 审这个输入吗?它既可以连接路径,也可以呢连接字符,这个呢就是指的一个多肽的特性。 当然如果说大家想对这个莱博威有多肽的特性有更深入的理解的话呢啊,推荐大家看一下有三一电子工作室推出的每日一练第二步,每日一练的第二步呢,会对这个多肽的特性啊啊讲了一些啊 小项目跟小练习大约有两期的课程吧,通过这两期的课程呢,大家会对这个多肽的特性啊有一个更加深刻的理解,好这个呢就是一个小的课外拓展。好到这呢,我们就把利用 udr 连接到数据库的课程内容呢给大家讲完了,我们下节课呢再给大家讲利用字符串连接到奥克赛斯数据库,利用字符串呢连接到数据库是最为推荐的一种方式,因为呀他更简单更方便。 我们本章后面的课程呢就开始收费了,如果大家对我们三一电子工作室推出的 laboviv 有数据库存储的课程感兴趣的话呢,可以到我们的淘宝店铺啊购买此套教程 啊,淘宝店铺的获取地址呢是这一个地址,大家登录这个地址呢,就可以看到我们的淘宝店铺地址 啊,当然我们其他章节呢,还有一些免费试看的教程,大家如果感兴趣的话呢,可以到这个地址上啊,获取我们全部的免费试看的教程。 在最后呢,欢迎大家关注我们的官方微信公众号三一电子工作室,关注之后呢,回复视频教程也可以免费一些啊,免费领取一些视频教程,好,谢谢大家。


各位同学大家好,我们今天来看一道关于数组元素偏移量的问题。 首先给大家读一下题干。设一个数组 a 从一到 m 和一到 n, 这其实是一个二位数组。在这里我把数组的几种维度展开给大家说一下,以便于大家能够接受这个二位数组的概念。 这里我给大家讲三个维度的数组结构。首先我们来看一下一维数组。 一维数组就好比排成的一列纵队,他们是一种线性结构,称之为一维。 接下来的二维结构就是在一维结构的基础上扩充了一个维度及多行结构, 形成行和列的两个维度,因此称之为二维结构。而三维数组结构是在二维结构的基础上再增加一个维度,形成多个二维结构,我们称之为三维数组结构。 在本题中,我们设计的是二维数组结构,因此大家只需要关心他有多少行多少列即可。 正如题目中所提到,这个二维数组 a 由一到 m 行二到 n 列组成。 接下来的一个关键点就是按行存放和按列存放的概念。大家来看一下,这个数组是按行来进行存放的,放入的数据分 别是一、十、二、十、三、十、四、十、五、十、六、十、七、十、八十。 大家再对比一下按列存放。我们纵向来看一、十、二十、三、十、四、十、五、十、六、十、七、十、八、十、九十。因此存放方向的不同决定了我们摆放数据位置的不同。 同样是数组 a, 二、二按行存放的值为八十,而按列存放就变成了五十。 这就是不同的存放方式所导致相同位置产生了不同的值。 因此大家要注意本题中要求我们的二位数组三行进行存放, 且每个元素占用一个存储单元,那么他要求的是数组元素 a、 i、 j。 i 的值取一到 m 之间, j 的值取 i 到 n 之间。 最终他要求 a、 i、 j 这个元素相当于数组首元素的偏移量为多少。在这里我们不妨假设 i 为二,皆为三。 我们取 a 数组的二行三列的元素来进行模拟推演。 大家特别注意我们设置的 j 为三,这是因为题目中要求 j 的值必须大于 i。 因此我们取 a、 二、三这个元素来进行关。 首先,我们定位到这个数组的两行三列,它的值为九十。我们来数一数它相对于我们这个数组的首元数偏移了多少。 我们以手元素为起点,从二、十开始,数分别是一、二、三、四、五、六、七、八,偏移了八个元素。 在这里,我们用一个笨办法将数出来的结果与我们带入公式的值进行计算结果的比对。如果能对上,则说明这个公式是正确的。 因此,我们看哪一个公式计算的结果符合我们推演出来的八。首先我们来看 a 答案,我们将值带入后,得到最后 的计算结果等于五。我们再来看 b 答案,将值带入后,得到最后的结果为八。符合我们之前所数的偏量,暂时放一边。 c 答案。我们将数据带入这个公式计算,得出结果为七。最后 d 答案 我们将纸带入这个公式,得到最后的结果为十三。这里必答案与我们所推演的结果保持一致。 为了更准确的证明这个公式的正确性,我们假设这个数组的元数是 a 三、四。我们再来数一下他相对于首元数的偏移量为多少。同样,我们以十 为起点,从二十开始数一、二、三、四、五、六、七、八、九、十、十、一、十、二、十、三、十、四、十五天一亮为十五。好,我们再来着重考察一下必答案。 我们将 a 等于三带入公式三减一等于二,乘以六二六一十二。 j 为四,减一等于三十二加三等于十五。 综上所述,我们经过假设两组不同的数组元素 来测算他的偏移量 b。 答案这个公式所推导出来的结果与我们所数出来的偏移量始终保持一致。 因此,本题选择必答案。这道题也是考察我们对于二维数组按行存放的偏移量公式的掌握情况。 如果我们今后遇到题目数组下标已零开始,则我们的公式可以进一步简化,不用对 i 和 j 进行简易的操作,大家可以直接套用我给大家的两个公式来进行计算。 请注意一个是按行存放,一个是按列存放的。最后,我们以 a 幺二这个数到首元数的偏差值为例,给大家说明一下公式背后的逻辑。 数组 a 幺二等于九十。这个词所在的位置是由第一排的单元数加第二排的单元数构成。 a 代表有几行, j 代表有几列, m 代表总共有几行, n 代表总共有几列。因此 a 乘以 n 就计算出了第一排元素的个数,再加上 j, 就完美的得出了当前元素所在的位置。 并且由于阶从零开始,因此实际所在的第三列其阶值为二,所以最后的偏差值减一也就正好不包含首元数 a 零零, 所以最终 i 乘以 n 加上 j, 就代表了数组,该元素相对于首元数的偏差值。好了,今天的内容就到这里,希望大家通过我的讲解,能够对数组的多个维度表示以及数组的偏移量 有所了解。如果觉得对您有帮助,希望您能给我点个赞,因为你们的鼓励是我前进的最大动力。记得关注我,您身边一个能讲懂计算机知识的朋友。