一张图解释什么是遗传算法_【图文】一张图告诉你为什么要了解底层

12a9d7c8f472dfae2029b7a0e0406f6d.png

思考题

e0ba83524e7cbd1e9cdcf531693220d1.png

【题目】根据图片所示,请问_按钮1_被单击()被被点击后,a和b将返回什么值?

a6aa033579e0e09d58c78b0c46c4cd17.png

12a9d7c8f472dfae2029b7a0e0406f6d.png

答案揭晓

15ded2aafe8092e16248d4a5ee0c20c7.png

5e9924ebca528f52e3453abd2c6a575f.png

12a9d7c8f472dfae2029b7a0e0406f6d.png

解题分析

为什么会返回的都是“exiroom”?

那么你需要理解两个场景

  • Part1

其实还是要从数据类型来说,虽然易语言是有文本型的,但是这个文本型在数据传递的时候不是直接把文字放到碗里面,然后连着碗一起端走的。它的传递方式就像是寄存柜,文字内容是放在一个固定的地方如寄存柜的某个格子,系统分配给你一个某格子的凭证,上面可能写着“A101”标记文字内容所在的格子,如果你不小心把你的凭证弄丢了,而巧合的被另一个人捡了,请问,那个人能打开你的柜子取出你的东西吗?答案是可以的。

  • Part2

依旧是一个寄存柜,用户在某个柜子里面放进了一串文字,然后它拿着标记有“A101”的凭证走了。结果,管理员过来检查了寄存柜,他打开了A101”的那个柜子,他突然发现里面有很多好东西,然后动了念头,就自行把柜子里存放的东西给换成他的东西。然后抬头看看周围有没有摄像头,发现没有,然后开心地走开了。用户回到家想起来之前还在寄存柜放了东西,于是让自己的儿子去取,儿子取回来东西还是他原来存放的吗?

5a5ff40a72064a8d2bf86a9b4e93df53.png

如果你看明白了,相信也就理解为啥结果是“exiroom”了。

用比较编程的语句来解释:

cf4429f6d28b71c1f13538643f8d5364.png首先,类似a=“易语言自习室”这种定义方式,“易语言自习室”是存在于一个叫做常量区的地方。

cf4429f6d28b71c1f13538643f8d5364.pngGetstr1()的运作过程:

虽然a=“易语言自习室”,但实际上a存储的东西是一个指向放着“易语言自习室”的内存块地址(常量区的某处)

然后我修改了内存块地址上的内容(请注意,我没有改变内存的地址,我没有修改凭证编号)

最后子程序返回的是a,那么主程序接受到是a返回的一个地址,这个地址所代表的凭证编号没有变,系统就按照凭证编号去取了里面的值,而那个值被动了手脚,所以返回“exiroom”

cf4429f6d28b71c1f13538643f8d5364.pngGetstr2()的运作过程:

虽然b=“易语言自习室”,但实际上b得到的还是一个指向放着“易语言自习室”的内存块地址(这个地址与Getstr1中a所指的位置是同一个);

虽然内存块地址的地址还是那个地址,但是内存地址里面的值早就被Getstr1给动了手脚,里面早已没有了“易语言自习室”

最后子程序返回的是b,同理,程序接受到是a返回的一个地址,系统就按照凭证编号去取了里面的值,请问值是啥?——“exiroom”。

cf4429f6d28b71c1f13538643f8d5364.png结语:

这个题目,如果你已经理解了指针和内存的四区也就自然而然理解了。

如果不理解,其实也不影响大局,让大家开开眼而已,因为易语言本身就弱化了指针概念。

如果你是易语言新手,请注意下面的文字:

0356aa60a32fb02a878e63fa7d1933b2.png

!!!!

2feb5de29116b0dd60d88a2a621a7b7e.png

(题目素材来源于乐易论坛)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值