粉丝1.9万获赞38.6万


课时会暂时不会消失,但它会变成完全不同的东西,给大家一些方向。第一呢,路径解释会不讲产品,讲为什么这个方案能进病组,为什么这样用药不会亏。要懂第二季病组的成本要会算,结余日要能用一生听得懂的语言来猜路径。第二,素质会不讲产品, 讲政治世界证据、卫生经济学证据、押组获益、长期安全性等等。第三,准入请智慧把准入的战场请移到药师会之前。决定药能不能进医院的不是药师会那天的投票,是投票之前的几个月, 临床科室提案要既科评估、卫生经济学核算等。要是会开会那天章其实已经打完了。面对新的形势呢?一、宣布要从过去配合开会的角色,变成设计证据、设计路径设计准入的核心还在重复覆盖率评测签到表的那套, kpi, 团队将会被淘汰。

数组越界在 c 源中一定不可取,但是你有没有发现,有的时候越界访问程序没有问题,但有的时候程序就会崩溃。到底是随机现象还是有迹可循?下面就以 g c 编辑器为例,花两分钟时间帮大家搞清楚为什么越界会导致程序崩溃。 环境勿斑图二十四点零四比如这样一个代码,从键盘获取一个字母串,放在数组八分中,八分只有四个字节,理论上键盘最多输入三个字母,因为后面还会加上一个斜杠零。 有时候你看到的现象是这样的,输入了十个字母,程序正常运行。有时候现象是这样的,输入五个字母,程序就会 call dump, 原因就是大部分的 g c 编辑器都会默认开启占保护,这种保护机制叫 canary, 翻译过来叫金丝雀。 方法就是在函数战争中的局部变量和返回地址之间插入一个随机的金丝雀值, 在函数返回前,检查这个金丝雀值是否被修改,如果被修改,说明数组的使用越界了,侵占了数组后面的空间,就会让程序崩溃。如果 b e 的 时候加上杠 f no stack protector 选项关闭占保护就是我们看到的另一种现象, 即使输入多个字节,程序也没有问题,那这里的多个字节是不是随便多少,也不是用 gdp 就 能看出来。 inff 查看当前战争 pa 打印数组八十的奇石地址, 只要数组越界没有侵占到函数的返回地址,程序一般就不会有问题。这两个地址的差值是十二个字节,所以输入十一个字节大概率没有问题,但是输入十二个字节程序就会崩溃, 那这种金丝雀机制对于稍微复杂点的程序有没有效果?比如我定义了三个数组,让中间这个数组稍微越界一个字节, 在我目前使用的环境里面检测不到,因为金丝雀值只存在于返回地址之前,对于数组 b 的 越界最多只影响了边上的数组, 最后有没有工具能检测占内存的溢出?有的,我们之前讲过 j c 自带的三 d taser 翻译的时候开启检测选项,只要运营程序哪边越界都能帮你检查的明明白白。

哈喽,大家好,我是菜菜。不知道大家有没有和我一样的感觉,就是一件事情,如果是用打字或者书写的方式给他表述出来,就能够讲述的非常清楚,逻辑很清晰,自己想说的都能够说到。有一个非常明显的特点,就是线上吵架从无败绩。 但是一旦回到现实和大家面对面交流的时候,就经常会面临卡壳,逻辑不清,上句不接下句,甚至有时候会出现忘词这样的一个现象, 不知道大家是什么样子的,反正我自己是这个样子的,并且我发现我最近这样的一个状态是越来越明显了,因为我现在是在赌博吗?我周围的那些朋友真的就是个个都是人才,个个都能说会道, 他们经常会因为他们看到的一些社会性的话题,或者是日常生活当中看到的某种现象产生非常激烈的讨论,他们会站在不同的角度去讲述自己的观点, 其实我是很想要加入他们的,因为我觉得和大家这样讨论的话,是能够发现自己的缺点,自己的局限,能够拓展自己的视野,站在不同的角度去看待一件事情,能够就是加深我们自己思想的深度, 所以我非常想要加入他们。但是我经常面临的一个状态就是话到了嘴边不知道怎么样有逻辑,然后又清晰的给他讲述出来, 特别是有些人,他产出的那个观点非常的离谱,你非常想要反驳他的时候,但是你就是不知道该怎么说话,就会让我觉得自己很无能为力,甚至有时候会觉得自己很无能。后来我为了避免自己陷入这样的一个就是 觉得自己很没用的这样的一个状态,减少自我攻击,我就干脆不加入他们的讨论了,我就只当那个旁听者。但是也正是因为我这样的一个选择,就导致我越来越不会说话了,越来越难以表述自己的观点了。 翻看我之前的那些视频,其实也是一样的,我每一个视频都是写了非常非常长的那种竹字稿,甚至我还会在一些文字的后面添加,我读到这一句的时候,我要用什么样的表情,什么样的语气去说, 我没办法在做到表情管理的同时再去想下一句该说什么,所以我就只能照着那个稿子念,就很生硬。然后我今天讲这个东西就是第一次尝试脱稿。但尽管如此,我也是在私下啊,自己偷偷练了好多遍,才能够达到现在这样的一个效果。 这个时候可能就会有朋友说,你现在不是博士吗?难道你上去陈述自己观点的时候还少了吗?我想说的是, no, no, no, 那 完全不是一个东西,因为我们在做那个 ppt 的 时候,都是已经把那个 ppt 的 逻辑顺序给理清了的,而且那些实验都是我们自己做的呀,我们知道它是什么样一回事, 所以再上去讲的时候就能够就是讲的比较通顺,比较有逻辑。意思就是我们已经提前准备好了,知道要该怎么讲,所以能够把一件事情讲的很清楚。但一旦回到现实,那不一样呀,和大家面对面交流或者是讨论某件事情的时候,他需要你呃,非常强的应变能力和逻辑思考能力和你的表达能力, 就是要各方面协调起来,那是很难的。其实我之前并没有觉得这是一个问题,因为我觉得每个人都有自己的特点,而我刚好就是那个不太会说话的人, 而且我们日常生活当中大家交流好像更多的都是线上,再说了,我搞科研,我只要会用笔把某件事情说清楚不就行了吗?我要什么很强的逻辑表达能力吗?不需要吧? 直到我前段时间遇到了一件事情,就是我遇到了一个无良商家,他卖给了我一件过期的产品,而且他还特别 能狡辩,就是嘴特别能说,就是把我堵得我完全说不出话。我知道他都是在诡辩,就是在强词夺理,但是我就是到不知道要怎么去反驳他,就只能在那站着,就是面红耳赤,甚至后来还很不争气的一直在那哭。事后回想起来,我真的很想把自己锤死, 就就是一直在责备自己,当时为什么就不反驳他呢?为什么就不能就是把那些话想说的话都说出来呢? 还有一件事情让我大受震撼,就是我前段时间参加了一个会议,那个会上有一个老师让我印象非常深刻,其实那个老师乍一眼看上去挺普通的,但是当他开口的那一刻,简直可以用惊艳四座来形容,就是他全程的报告,大概是二十多分钟吧, 他的那个报告内容真的讲的非常好,非常精彩,条理很清晰,逻辑很通顺,全程没有一句废话。更关键的是他在保留自己专业性的同时,让你哪怕是一个外行人也能够听懂他到底研究的是什么样的内容, 就是感觉他在讲的时候,整个人散发着那种光芒,人格魅力拉满了,再看他好像也不是那么普通了。当场下来我就去加了他的微信,一看他的履历,好家伙,清华大学毕业,现在年纪轻轻三十岁出头,就已经是中科院研究所那边的一个教授了, 虽然咱这辈子都到不了他的这个高度了,但是我觉得我们可以向他看齐,真的听完的听完真的听完他的那场报告之后,我产生了非常强烈的欲望,就是我一定要锻炼自己的语言表达能力,我要变强,但是我又不知道该怎么去提升自己的能力, 所以我就把我的这样的一些状况用笔给他写下来,然后我发给了 ai, 让他给我分析看我这个到底是什么样的原因造成的,可以怎么样去解决。 说到这里我要感谢一下 ai, 真的 是科技改变生活。他给我分析了一下我造成现在这样的一个原因。首先第一个是我们现在花了很多的时间在微信评论区上面去打字交流自己的想法, 但现实当中,特别是面对面交流的那样的练习的机会变得越来越少,我们大脑就习惯了那种非实时可编辑的那种输出模式,所以切换到现实当中,面对面的这种比较及时的对话,就会变得非常的生疏。 第二个就是我们的大脑已经习惯了接受短语表情包,分段式的那种碎片信息,这会让我们更加擅长简洁有力的书面表达,但其实我们日常交流的话,他会需要我们拥有那种长篇连贯式的能力的, 而且还需要我们能够根据对方的表情变化,还有他们的词语接受程度去改善自己的措辞。 第三个就是我们好像已经习惯了那种完美表达自己的状态,所以在日常生活面对面交流的时候,可能会因为害怕自己说错话,或者是觉得害怕自己呃表述的不够清楚而变得紧张,而这种紧张的状态又会进一步抑制你的表达,形成了一个恶性的循环。 大概就是以上的几点原因,他还给我提出了几条比较合理的建议。第一个就是我们要先克服自己内心的恐惧,如果你不知道一句话要怎么去说的话,可以先停顿两秒,用足够的时间去想清楚这句话大概要怎么去说,然后再开口。 第二个就是可以尝试读一段文字,把那个书合上之后,再用自己的话把它复述出来,这个能训练我们把书面语转换为口语的能力。 第三个我觉得实操性还比较强的,因为我们现在大部分时间不是花在了微信或者评论区上面去打字吗?我们可以尝试直接发语音,或者是语音转文字,让我们的大脑习惯用嘴去讲述清楚一件事情。 第四个就是像我现在这样,围绕一件事情展开讨论,发表自己的观点,不写稿子,用视频把它录下来,寻找自己还能够进行改善的地方。 以后我应该还是会选择这样的这样的一个方式来提升自己的语言表达能力,希望大家能够给我提出宝贵的意见。以上就是我今天的分享,谢谢大家,拜拜!

你是不是还是只会点击这个三角形来运行 c 元程序呢? what? 这个三角形它只是我们这些高级开发工具里边所带的这种快速运行的方式,那如果没有这个三角形,那我们的 c 程序要怎么才能去运行呢? 哎,这样的话,我们就得认识一个好帮手了,它叫 g c c, 它是由 g a u 开发的编程语言,编一起,那么它的主要作用呢,就是能把咱们写的 c 语言代码翻译成电脑能看懂的机器语言。哎,它就是一个超级翻译官,那怎么去用呢?好,我们来看一下,在这个地方,我们里边有一个 hello 点 c 的 文件,这个代码呢,非常简单,就是做了一个 hello word 的 输出, 我们想运行它呢,哎,我们只需要在上边儿打开这个 c m d, 输入 c m d, 打开我们的命令行窗口。但是大家注意,在这个之前呢,你是需要去配置并且安装这个 g c c 的, 安装之后呢,还需要配置 g c c 的 环境变量哟, 好,在这里边呢,我们输入 g c c hello, 点 c, 带上我们这个名字,然后点击回车键,然后我们就可以看到,在我们的文件夹里边呢,它帮我们生成了一个 a 点 ex 的 文件, 这个就是默认的,在我们 windows 系统下边,它默认给我们生成的可执行程序的名字就叫 a 点 exe, 那 么如果在 linux 系统之下,它生成的可执行文件就叫 a 点 out。 好, 然后我们在这个地方呢,把这个生成的 a 点 exe 的 这个文件名字输上去,点击回车键,我们就可以看到这个 hello world 就 输出了。 啊,这就是 gcc 的 方式进行运行这个 gcc 的 方式呢,也是大家都要掌握住的方式,你不能只会一个三角形,那么这样呢,它如果说每次都给我生成的文件名都叫 a 点 e x e, 那 这样的话,它的辨识度就不够高。哎,我们可以在 gcc 的 命令里面去加上一些参数,比如说我们加一个 gcc 杠 o 哎, hello 点 c, 然后呢我们中间再给它加上一个 hello, 这相当于什么意思?就是把 hello 点 c 呢编以后的文件不叫 a 点 e x e, 而是叫做 hello 点 e x e, 我 们可以看一下这个效果好,那么在这个地方呢,我们就看到一个文件叫做 hello 点 e x e, 然后我们运行它 hello 点 exe 回车,哎,我们同样看到一个 hello world 的 这个输出啊,那所以说呢,这个关于 g c c 命令啊,它里边还会有很多这个相关的,呃,参数啊,还会有很多相关的参数,比如说我这边给大家这个表格里边放了一些啊,杠 o 啊,杠 c 啊,杠沃啊等等很多这个相关的参数。 呃,这个东西呢,大家可以自行观察一下啊,了解一下。好,那这期内容我们就到这里,下期再见呦。

你以为系统编程只能靠 c c 加加? rust 用内存安全和高性能重新定义了系统开发的可能性。 rust 是 由 mozilla 基金会主导开发的静态强类型编异型语言, 核心设计目标是同时兼顾高性能内存安全与高并发能力。过往的系统级开发语言 c c 加加性能极强,但容易出现野指真内存泄露等安全问题。 而带垃圾回收的语言安全系数高,却存在较大的运行时开销,并不适合底层开发。 rust 相当于自带智能安全辅助的高性能跑车,既保留了接近 c c 加加的运行速度,又从语法层面杜绝了绝大多数内存安全漏洞。 这里要注意,不要把 rost 等同于带语法检查的 c 加加,二者的底层设计逻辑完全不同。要实现这样的设计目标,核心在于 vast 独有的内存安全机制,它实现内存安全既不需要依赖垃圾回收,也不需要开发者手动申请释放。内存 核心靠使用权、借用生、居住期三套规则所有检查都在编一阶段完成。这就好比房屋租赁的规则,房子的使用权属于房东,租客只拥有约定租期内的使用权, 到期必须归还,不会出现多人同时占有同一套房屋引发的产权冲突。这些检查不会产生任何运行时额外开销,运行速度和 c c 加加处于同一水平。不要误以为内存安全一定会牺牲运行性能,其中所有全是 rust。 最核心的设计 有三个不可打破的基础规则,第一,每个值在同一时间有且只有一个所有者。第二,所有者离开变量作用时,对应的值会被自动回收。第三,值可以在不同变量之间移动,也可以临时借出使用权。我们可以用买奶茶的场景来类比, 你买了一杯奶茶,你是唯一的索用者,你喝完扔了奶茶就被销毁。你可以直接把奶茶递给朋友,也就是使用权。移动也可以让朋友尝一口,也就是临时借用。这里要注意,不要把 rest 负值和其他语言的负值混淆。 rest 负值默认是所有权移动,不是深拷贝,不会重复占用内存。 在保障内存安全的基础上, rest 还支持非常灵活的高级抽象能力,也就是我们常说的零成本抽象特性。 它支持范型特征、模式匹配等高级抽象语法。所有这些抽象层都不会带来运行时的额外性能损耗。 这就像你在餐厅点定制套餐,不管你是选固定搭配还是自定义配菜,厨师都是按最终的需求直接做好出品,不会因为你选了自定义搭配就额外收服务费或者出餐速度变慢。 和很多待运行时的高级语言不同, rust 的 抽象都会在翻译阶段直接展开为对应底层代码,不要觉得用了高级语法就一定会拖慢运行速度。 除了常规场景下的内存安全, rust 在 病发场景下的安全保障也十分突出,它从语法层面保证了病发场景下的内存安全,编一期就能检查出数据竞争问题。核心规则是,同一时间要么只能有一个可变引用,要么可以有多个不可变引用,读写操作不能同时存在。 这就像公共自习室的使用规则,要么大家都安静看书,也就是只读,要么只有一个人上台发言,也就是可写,不会出现几个人同时抢一个话筒的混乱情况。要注意, rust 不是 完全消除所有并发症问题,逻辑层面的死锁,业务逻辑错误仍然可能出现,只是不会出现内存不安全的并发症。 了解了这些核心特性后,我们就能明确 rust 适用场景边界。它的优势场景集中在对性能稳定性要求极高的领域,包括操作系统、内核、数据库、底层 web assembly 组建 云原声、 flexibly 组建云原 v m p e 组建云原声基础设施等。目前 linux 内核已经正式支持 rust 开发,微软也在使用 rust 重写 windows 底层的安全敏感模块, 但它并不适合快速迭代的小型业务脚本、临时数据处理工具。这类场景,严格的翻译检查反而会拖慢开发效率。不要把 rust 当成万能银弹,任何场景都强行使用。它的优势只在性能敏感、对可能性要求高的场景才能体现。 rust 的 所有安全保障其实都来源于它严格的翻译期检查逻辑。它的翻译期是出了名的严格,会把内存错误、类型不匹配引发安全问题,甚至部分逻辑错误都在翻译阶段暴露出来。不修复这些问题就无法生成可执行文件。 这就像你参加 b 卷考试,监考老师站在你旁边,你写错一个知识点就立刻指出来让你修改。虽然做题的时候会觉得麻烦,但提交的试卷正确率会非常高。翻译速度慢是 rust 的 明显缺点,但是换来了运行时的高稳定性, 线上运行时极少出现崩溃问题。不要觉得翻译报错多,就是代码写的太差,这是 rust 的 正常保护机制,大部分报错跟着编辑器提示就能直接修复。 对于已有成熟项目的团队来说,也不用担心落地。 rust 需要全量重构,它天生支持友好的跨语言户操作能力。 rust 支持和 cc 加抓代码无缝互相调用。你可以在现有 cc 加抓项目中嵌入 rust 模块,替换安全敏感的部分。也可以在 rust 项目中直接调用成熟的 cc 加加第三方库,不需要把现有项目全部推倒重写。 这就像老房子翻新,你可以保留质量完好的旧家具,只把老化有安全隐患的水管、电路换成新的,不用把整个房子拆了重建。 另外, rust 翻译出来的二进制是静态链接的,部署的时候只需要单独的可执行文件,不需要附带任何运行时环境。不要觉得用 rust 就 必须重构整个现有项目,渐进式替换是最合理的落地方式。 最后我们来说说 rust 的 学习曲线特点,它的学习曲线比大多数常见编语言更陡,入门阶段前一二个月会频繁被翻译报错卡住,尤其是所有权、行命周期这类其他语言没有的概念,理解起来需要一定时间。 这就像学开手动挡,汽车一开始起步频繁熄火,换挡经常卡壳,但是一旦熟练之后,开起来既快又稳, 不用怕半路出故障。目前 ross 官方的学习文档非常完善,社区活跃度也很高,遇到的绝大多数问题都能找到现成的解决方案,不要因为一开始上手困难就放弃。熬过入门阶段之后, ross 的 开发效率甚至会超过 c 加加。以上就是今天关于什么是 ross 的 语言。

如果你用的是 oppo、 一 加这两个品牌的手机,并且系统升级到了 coloros 十六点一级以上版本,那么手机上的 adb 权限很可能会失效,你猜为什么?因为新版本系统把这个开关给去掉了。那你先别慌,这里我教你两个方法恢复它。首先第一个协修方法, 我们先将手机语言切换成英文,然后打开开发者选项,并在里面找到 disable system optimization 这个选项,将它打开 adb 权限就能正常使用。这时哪怕我们将语言切回中文,这个选项也会一直保留。 而第二个方法就更简单了,我们现在开发者选项中打开 usb 调试,然后用数据线将手机和电脑连在一起,接着在手机上同意 usb 调试授权, 然后在电脑上打开 c m d 窗口,输入这项命令,并按回车执行,即可恢复这个开关。不过要注意的是,打开这个开关以后,系统的 ui 界面可能会变成这样,出现这种情况的话,我们只需要把这个选项关掉即可恢复正常。好了,视频到这也就结束了,那么你学会了吗?

你啷个一直在想这个嘛?我刚不是说了,活着就要守护享福的人,你也是我要富的人之一,别想不开哈。而且你才刚说要请我吃烤鱼,还没兑现嘞。 我刚说过,你们这群人真是固执,意义是自己找的,不是别人给的,就像我守在大坝,意义就是不让哈弗克把这里变成坟场。你要是还没找到, 不如先帮阿萨拉人做点什么,或许答案就出来了。 活着就是为了达成你设定的目标。我的目标很明确,那就是彻底碾碎你们这些阻碍哈夫克的蝼蚁,顺便守护好卡米。如果你现在没有目标,那最好立刻去找到一个。

大家好,咱们这节视频呢,继续看我们这个强制类型转换哈,那么第二种情况,时针的类型呢?是大时针呢,不要操作小空间,什么意思呢?比如说我这个有一个空间呢,是 a 啊,这个 a 的 空间呢,是四个字节, 然后我用一个浪浪类型的纸质呢,这个浪浪是八字节的,对吧?用这个浪浪类型的纸质呢,就指向了这个小空间,它的指向是没有任何问题的,因为这个 p 呢,可以装,任何类型的纸质它都能装,但是呢,它能不能操作呢?那就不一定了,对吧?好,那么下面这步操作呢,就会出现异常, 呃,什么问题呢?因为我 a 这块空间呢,只有四个字节,对吧?而我浪浪这个纸真呢哎,他一次操作八字节的空间,这也是我们在前面讲纸的时候给大家介绍过,对吧?包括这个情况呢,咱们也说过,就是我们这个呃,纸真呢,他一次操作多少字节的空间,那么这个操作的这一个单元呢, 就是由他的类型决定的,对吧?浪浪是一次操作八字节,那么你用这个星 p 去操作,我指向这块空间呢,哎,就是操作你这块空间四字节之外,又额外的操作了四字节。哎,那么把这个四十五呢,转成这个六十四位的二进制,哎,这个六十四位的二进制呢,就装在这六十四位的空间里边,对吧? 哎,那这样的话呢,就有四个,这个四个字节呢,是,这叫越界了,对吧?这叫越界了,就像我们数组越界一样,是一个基本的道理。然后这块呢操作就异常了哈,咱们给大家演示一下, 哎,这呢, 这是我们一直强调的哈,就是指真呢,你这个东西你不管怎么操作啊,一定不要越界,你可以少用一块空间,但是万万呢不能多用空间啊,哎,比如说这块重新复制了哈,咱们编一下 好,它这块呢,就已经提示这个类型不兼容了,对吧?像这种指真的警告呢,我们一定要去解决了它,因为指这个东西非常的啊,容易出问题啊, 我们点击继续点击之后发现什么?哎,发现了,出现了这个异常了,对吧?已引发异常。而什么呢?是 stack around the value a was 这个东西什么意思?就是这个 a 这个变量呢附近呢使用越界了, 对吧?但是他这个越界这个异常呢,在哪报的呢?我们看一下啊,这个报的位置也非常的啊,有意思啊,他呢,看我们正常呢,运行到呃程序的最后一个大括号的时候呢,没有出问题,对吧?也就是我们这个呃程序呢,运行完了没有问题,什么时候出问题了?哎,在我们程序结束的时候出了问题, 对吧?哎,像这种问题呢是非常严重的,因为呢他出现的这个这个这个越界呀,在我们程序的运行过程当中呢,没有产生异常的中断, 对吧?所以说他在运行当中产生的问题呢,是不可知的,不可预知的,哎,就让咱们前面说的,因为你越界了,哎,我们这个程序里边可能定义了很多的变量, 是不是定义五十个变量,哎,那么这些空间呢,基本都是连续的在这定义的,对吧?当然不一定是非常连续啊,但是说他定义在哪个位置呢?他大概是有一定规律的, 哎,那么也或者说呢,就是一个挨一个定义的吧。哎,那么你前面这个变量使用越界了,很有可能呢,就把人家后边这个变量的空间的一部分给改了, 对吧?你把人家这个数据改了,那么我这个变量 b 呢,他在使用的时候呢,数据就不对了,是不是他数据出问题,那他又引发的问题呢?我们又不可预知了,所以说这个越界呢 引发的问题呢?是啊,不可预知的,哎,可能会造成非常严重的后果,也有可能呢,没有产生什么异常严重的后果,明白吧?所以说这个问题呢 啊,我们就知道了,这是越界了,对吧?这是这个问题哈,然后紧接着我们看第二种情况,这就不必多说了哈,大家呢,这个 他就这些基本道理呢,太简单了啊,没有比这更简单的啊。好,那么我们这个小指针呢,是可以操作大空间的哎,比如说我定一个浪浪的空间,这个空间呢是八字节的,对吧?我定一个硬的型的指针呢,去指向这块空间,这个指向呢是没有任何问题的哈,你可以指向任何东西, 对吧?任何的地址他都能指,但是操作的时候能不能呢?哎,我这个呢就是能操作的,因为我这个 p 呢是 int 的,是吧? int 呢,一次操作四字节的空间,而我这个 a 呢是八字节的,对吧?哎,他八字节这么多哎,有两个四字节,那我这个 p 呢,是指向他的手地址的, 那我用这个 p 去操作的时候呢?哎,他就操作的是,哎,前面这个四字结,对吧?后边还有四字结呢,哎,他怎么着他就没去操作,所以说没有越界,只要没有越界就不会产生这个异常中断的这种事情,但是呢, 哎,那你这个操作也会出现一定的问题,什么问题呢?比如说我这个 a 是 四,对吧?然后呢,你用这个星 p 去复制这个四的时候呢,就不是四, 对吧?哎,就是我们这个 a 这个边调里边,你你通过他去复制一个数据,但他里边最终装的不是那个数据,这样的话呢,就 啊就就不对劲了,对吧?可能就会产生问题了哈,毕竟呢,你你你才操作人家一半的空间,对吧?你后面那一半操作不到呢,而使用这个 a 的 时候呢,他使用的是整个八字节,对吧?而你这个星 p 呢,只操作了人四字节, 那可能就会产生问题,对吧?但是呢,他不会产生这种越界非常严重的这个事,是不是?哎,他呢会造成可能一些逻辑上的错误啊?这个呢,大家也能够去预想的到,那么我操作前面的四字节,我可以操作后边的四字节吧,也可以啊,因为 p 呢是指向这个手四字节手一指的,那我 p 加一 是不是就第二个四字节的手地址了,哎, p 呢就指向这儿了,就把它完成,当完全当成我们数据库的那种去使用了一个 int 类型的数组,只不过这个 int 类型数组呢,是两个字节的,对不对?哎,所以说这个星 p 加一呢,就是我们后面这个四字节了, 哎,这是,呃,或者说我们也可以转换嘛,对吧?转换成这个 p 方括号零,这个下标计算 p 零 p 一, 哎,这就是两个四字结,哎,那么这两个四字结呢,操作都没有问题啊,那你说 p 二的时候呢?哎,那就出问题了,对吧?那 p 二呢?是这一块空间了越界了啊,这就是我们的这个情况啊,那么我们可以把这个东西呢简单给大家演示一下啊,当然的话,你不仅可以指向这个,是吧?比如浪浪 a 等于十二吧,然后我这个这个这个印的星, 哎,写上。那么平时大家如果说是你的编辑报错了的话呢,你就把这个墙转写上啊,写上这个印的星, 对吧?把这个墙转给他写上啊,这样的话呢就不报错了。所以有的编辑可能会报错啊,有的呢不报错这个呢也没有事啊,你这个最好呢给他写上啊墙转, 然后紧接着呢,我们就星 p 或者说直接 p 方括号零,对吧?然后紧接着呢我们就星 p 或者是一个三,对吧?然后第二个四字结, 我们给它复制一个六,哎,可以吧,没有问题,对吧?然后我们如何去看我们这个数,这个这个呃 数值的一个结果呢?我们使用这个十六进值形式啊进行看啊, l l x, 然后呢输出一下我们这个 a 的 值,这样我们看一下它的十六进值啊,包括呢我也可以呢,去先看一下我的这个原值,对吧?然后呢再看一下复制之后的值啊, 都很简单啊。好,我们看一下,那么我们看一下这个原值呢,就是一个 c, 对 吧? c 的 结果是什么? c 的 结果就是,呃,一共是 十六十六个位,对吧?就前面十五个零零零零零 c, 但是他没有输出那么多零啊,他直接输出个 c, 就是 他这十六个,十五个零,一个 c, 这是他的一个输出结果啊,很很理解,对吧? c, 那 就是十二嘛,哈。然后紧接着我们进行两个复制之后,那第一个四字节呢?复制了一个 三,对吧?这个小端存储,那么他存在这一面,对吧?三三的话呢?前面是七个零,对吧?零零三,然后的话呢?下一个这个高的这个八个位呢?呃,不是八个位,八个字节呢?不是八个字节, 是几个四个字节啊?四个字节,十六个位啊,前面那就是十五个零,然后呢一个六,这个六,前面这个十五零呢?就省略了,哎,你看这个效果呢,我们一下就看到了,是不是啊?这就是这么一个东西啊?那同理啊,换句同理,什么叫同理呢?比如说我又定义了一个啊,两元素的啊 啊,两元素的整形变量,那么这个整形变量我是不是就可以完全当成这个 double 类型去这个浪浪类型去使用了?哎,没有任何问题,对吧?比如说浪 浪型 pp 啊,就装着谁啊?装着这个 b 啊,那么我这样的一个啊,两元素的数组是不是就完全能够当成啊?这样一个浪浪的一个空间去使用啊?这也是八字节吗?哎,这也是八字节,哎,正好就使用了,没有任何问题,对吧?然后是取一指啊, 啊,这样的这个写法就类似我们那个联合里边的是一样的,对吧?如果这个纸真和我们,他和我们这个 b 变量的共用的是一块空间啊, 这是这个类型转换啊,这个东西呢听着很难,其实呢很简单,对吧? 也就是说呢,我们空间这个东西呢,要有一个更宽泛的,或或者说更深入的一个理解了哈。空间这个东西呢,不管是什么空间, 任何类型的空间,它都是空间,没有区别。比如说你定一个普通变量 b, 哎,这是四字节空间,你定一个浪浪呢?是八字节空间,对吧?四字节就短一点,那八字节就长一点,对吧?你可以定一个数组,对吧?那个数组呢?就更长,哎,更多的一块空间,甚至说你可以码 lock 一 块空间,对吧? 然后呢,再或者呢,你可以是定一个结构体,结构体呢?也有一块空间,哎,就任何东西呢,都有一块空间,那么这些空间它的本质有区别吗?没有区别,都是这个物理内存上的一块空间而已,对吧?而我们能够得到什么?就是这块空间的手地址,对吧?不管他这个手地址是什么类型的,最终呢,我们这个类型可以转换呀, 是不是?哎,他是 word 星的,我们可以转成数组使用,转成这个整形使用,转成这个 double 去使用,使用的都是这块空间, 你比如他是一个数组的地址,他这个八呢,本身是个浪浪,对吧?八字节,那,那,那你就把它转成数组去使用,可以吧?没有问题,你转成叉星去使用,转成少的星,转成任何星,哎,所以说这些空间呢,不管是怎么来的这块空间,他都是一块空间这块空间的,呃, 我们得到他手地址之后呢,就可以对这个手地址呢进行一个转换,之后啊,再对这块空间呢进行任何的操作,只要比约介就可以,对吧?所以说呢, 我们这个东西啊,它的使用呢,是非常的灵活的哈,并不是说,哎,你看这是 in 的 空间,它只能当 in 的 使用,不一定,对吧?我定义这个 a, 我 把这个手地址呢我,我给它转成叉星,它是不是就成了这个四元素的叉书组去使用了呀, 对吧?哎,我叉书组四元素的,我就需要四个字节空间,你这个刚好四字空间,好,你就来吧,我就不用去 mark 了,对吧?哎,我指向你,我就当这个去使用了 啊,这是啊,这个空间的一个理解啊,一定要理解到位啊,可以数组,可以结构体等等等等,其他的通过其手地址的转换呢,只要不越界,我们就可以对这个呃空间里边的任意字节进行访问,并且呢通过任意的这样的一个方式呢进行访问,对吧? 也可以把它作为任何的东西来使用。那么强制类型转换呢,本身也是一种运算啊,咱们前面说了它是一个运算符嘛,它是不改变原数据的哎,比如说 c, 对 吧?咱们刚才说了是演示这个了哈,那 c 的 话呢,我们一个呃强制转换, 那么 c 是 没有任何变化的,它是怎样的?这是个表达式,仅仅是用我们的三点四呢去运算了一下,对吧?那三点四进行一个强制转化的,转成 int 型了,它就变成了三了,所以说这个表达式的结果是三,并不是说我这个 c 变成三了,对吧?只是这个表达式的结果是三哈,那么三的话呢,复制给 a 啊,这是 这个事啊,所以说只有复制的时候呢,才会影响,就是将我们这个 c 呢进行强转,又复制给我这个 c 了, 哎,那么这个表达式的结果呢?我们后面这个小括号啊,这个 c 表达式结果呢是三,要把这个三呢复制给 c, 那 c 呢?就变成三了,你不复制的情况下,他是不会改变的啊,这就是强制力型转换啊。咱们这块呢,也不过多多说了,主要是要把这个这句话理解到位了。你把这句话理解到位了,那么我们的这个, 呃,指这个这个强制力型转换呀,这个指真和空间的这个操作呢,就完全的懂了啊。
