开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 5599|回复: 22
收起左侧

[技术专题] 易语言windows开发从入门到死亡:第三章.指针

[复制链接]
结帖率:100% (1/1)
发表于 2017-5-24 00:33:38 | 显示全部楼层 |阅读模式   广东省中山市
消失大概有半年时间了一直也没更新
其实我又换行了这次至少没跨语言.好吧,J2EEC++cocos2d-x再跳到现在的windows内核安全.我的跨度连新上司都觉得可怕
新东家居然不让用易语言.非要我写python…讲真,你抓一个出来.我用易语言开发.他用py.如果他写的比我快,老子现场直播生吞显示屏.在公司是双屏,我双屏一块吞.
这段日子算是闲下来许多.从北京跑到广东.来了一个二线不到,三线有余的城市.好吧,不扯了.
前些日子在群里,看到有人说.API好难,数据类型看不懂.
我当时就在想.TM哪里难了?好吧,初学是很懵逼,但是我不是讲过么?
QQ图片20170524003224.png
?讲过么?
卧槽!?我居然没讲过???
TM就尴尬了
QQ图片20170524003236.png
好吧,没讲过就现在补上.当初做这个系列教程,就是为了授人以鱼不如授人以渔.结果却忘记了重要的东西
那么我大概花两到三章.专程.讲解windows数据类型.
第一章,讲指针.虽然易语言不提供这个东西,但是你想绕过去真的没门
第二章,C语言数据类型(并非C++)以及windows数据类型
第三章,讲结构体.因为这玩意也是做win开发避不过去的
我不会跟你扯什么C/C++.因为我清楚并不需要去了解C/C++,CC++是两门语言.其实我有时候丧心病狂起来连C语言都喷.
但是你想深入了解.掌握使用的方法.那么上面三样你是绕不过去的.
关于API的概念.之前也讲过了.这里我就直接进正题了!

评分

参与人数 4好评 +4 精币 +12 收起 理由
web11234 + 1 + 2 大神 出套教程吧 说不定你能中奖啊。。。。。
阿珏 + 1 + 3 共同努力,共同进步
雁子 + 1 + 2 奉上小小红包希望笑纳
冰点 + 1 + 5 精彩文章希望继续努力

查看全部评分


本帖被以下淘专辑推荐:

  • · 666|主题: 11, 订阅: 0
结帖率:100% (1/1)
 楼主| 发表于 2017-5-24 00:35:29 | 显示全部楼层   广东省中山市
QQ图片20170524003224.png
你们大多数人可能会有这样一个API大全(说是大全,其实内容很少).我还没接触win开发的时候,看到这东西也非常懵逼这个HWND到底是啥我也不知道
如果说要我给出一个最简单的办法.那就是来一份windows数据类型跟易语言类型的类型转换.这样新手就不会害怕参数列表这些看不懂的参数名了.
我也这样想过,但是不太现实鬼知道微软这狗儿子到底定义了多少这种玩意
所以,我会教给你们.如何把这些东西,翻译成易语言的数据类型.
指针网上讲的很多很多.但是对于易语言学习者来说.看懂是个麻烦事,因为全是C或者C++的代码
所以转开这章节.来讲指针
在计算机科学中,指针Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为指针。意思是通过它能找到以它为地址的内存单元[1] 高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。
节选度娘百科
首先得知道内存是什么样子的.为了通俗易懂.某些不重要的东西直接跳过
QQ图片20170524003236.png
这个就是内存大概的样子了.定义整数型变量A.值为12345678,他也许在内存中就是这样存储的
易语言整数型占用4个字节.你可以理解为第一个字节是12.第二个是34.以此类推.如果A的值为12.也许内存中就是00 00 00 12
当然,实际存储完全不是这样.但是为了方便理解,你可以认为是这样.如果需要谈起究竟.可以考虑买本计算机原理
定义这个整数型之后,你想使用.其实就是读出这4个字节的值而已
比如整数型a=a+1
其实就是把这12345678取出来.然后+1 最后放回到这块内存中 也就是变成了 12 34 56 79
那指针是什么.我想你也许听过很多次,说指针就是指向该地址的一个变量.
不过这样说太难理解了.教你们点特别骚的东西
QQ图片20170524003415.png
指针,你可以当做是一个手指.让后指在这个地方.like this
QQ图片20170524003420.png
指针会指向这个变量在内存中的地址.如果这块内存是1000的话.那么指针就一直指着1000.
OK.这点搞懂后,继续理解指针本身.初学者懵逼的地方要来了
指针指向的地址.变量.和其本身的区别是一个容易懵逼的点
其实指针本身.也是一个变量,他跟上面一个变量a其实是一样.在内存的某个地方分配,然后占用地盘.
变量a的内容是12345678.指针b指向了a.那么b在内存中的内容.其实就是1000
其实很简单.你完全可以把指针跟易语言的整数型当成一个玩意
A里面存的是你实际需要用到的数据.
B存的是A的地址.
当你需要的时候,你完全可以从B里面取出A的地址.然后导航到A所在的内存.去改写这块地址的内容.然后A就被改写了
你直接用A的话.他会把A这块地址的内容提取出来.然后提供给你修改.
如果看到这里你能理解的话那就太好了.等我做驱动开发做烦了我就找个讲师的工作
来定义一个字符型变量.好吧,是字节型.
一个字节型.占用一个字节.
整数型,占用4个字节.
指针,32位系统上,占用4个字节.
其他类型我下一章会讲.不急
定义字节型变量C.然后用B指向C
此时.B依旧占用4个字节而不是一个字节.因为.B是个指针,他只是指向一个内存地址而已.架设C的地址为2000
那么B的内容就为2000.当你用指针导航过去以后.C只占用了一个字节.但是指针本身是4个字节.
也就是说.无论你占用了多少内存.哪怕你占用32G.指针永远只是指向这个地址.占用4个字节而已(32位下4.648.但是易语言不能编译64位程序)
OK.看到这里,如果你搞懂了.清楚了.那么我的任务就完成了
部分没搞懂.直接回复就好.我会给予讲解
完全没看懂那我也帮不了你呀,我也很绝望呀.这玩意大学教授也很难讲,指针想讲清楚是需要大量的知识铺垫的.
QQ图片20170524003427.png
你只需要大概理解这个东西即可.我们虽然避不过去指针,但是可以回避底层原理.

回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
 楼主| 发表于 2017-5-24 00:40:23 | 显示全部楼层   广东省中山市
QQ图片20170524003618.png
我之前写的模块里面找了一个函数
注意传址这个选项.勾选以后.就是传递其地址
啥是传递地址?
很简单,说白了意思就是人家要个指针好吧,咱们先分析一下两种方式的实现
不勾选传址.会把a的值取出来.比如a12345678.那么就把这12345678取出来.然后当做参数,传进去
如果勾选传址.就是吧a的地址传过去.比如a所在的内存位置为1000.那么实际传过去的值其实是1000
进入到函数内部后,他通过这个地址.去访问你的变量.你的整数型变量值是多少函数并不知道.
但是该函数知道你这个变量的地址在哪里.我直接去内存中的这个地址里面找,我找到1000以后.把这块内存的值.提取出来.就可以读写里面存的值了.
这就是指针.其实很简单.
当然,传址还有一个比较重要的意义.那就是对变量的修改
直接传值的话,比如a12345678.传过去以后.无论函数内部对这个12345678加减.都跟你这个变量a没有任何关系
但是传址不一样.他知道该内存地址以后,如果他进行修改.那么你的变量a也会被修改
打个比方.你把你们家地址给别人了.他是不是能过去拆了你们家房子?
但是你只给一张照片.无论他怎么破坏照片也没毛用啊.
本来还写了不少内容.后来发现越写越TM越写新手可能越懵逼.所以干脆不写了.放两张图,自行理解.也可以完全不看这两张图.因为我怕你们看的更加懵逼了
QQ图片20170524003625.png
输出结果(提示一下.赋值1637520是因为随便找个没用的地址,不然会崩溃…)
QQ图片20170524003630.png
这章到此结束.不懂直接回复.还是那句老话.有错误指出.查证后修改,我尽可能的保证权威性.不像某些视频一样.MD自己都没搞懂然后在那里搞的大家都不懂.喜欢的话去点一下我的头像.然后把听众点了.因为听众多看起来会比较吊.不管怎么样,先把B装出去
相信我以后不拖更了!我还打算详解API HOOK以及花式HOOK技巧呢,对了…winhttp这个坑还没填….….突然不想更了
QQ图片20170524003635.png
比较好奇教程贴加精的要求
我觉得直接丢源码好像很容易加精啊.写代码...花的时间比这玩意要少太多了...


回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 2 天

发表于 2017-5-24 09:33:25 | 显示全部楼层   广东省广州市
很强大,录成视频过教程会更好
回复 支持 反对

使用道具 举报

结帖率:95% (18/19)
发表于 2017-5-24 09:37:03 | 显示全部楼层   浙江省温州市
牛b的感觉,不错,写的很好,易懂性强
回复 支持 反对

使用道具 举报

签到天数: 14 天

发表于 2017-5-24 09:59:00 | 显示全部楼层   湖南省邵阳市
说得好像很好似的......好吧,真的很好,一看就懂了
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2017-5-24 20:26:03 | 显示全部楼层   美国
怎么没有很多人支持呢,好的东西,来支持支持!
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2017-5-24 23:02:25 | 显示全部楼层   福建省厦门市
。。。。还是不懂  
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)
发表于 2017-5-25 04:31:27 高大上手机用户 | 显示全部楼层   福建省泉州市
希望继续下去,让更多的人看到,所以我顶你
回复 支持 反对

使用道具 举报

发表于 2017-5-25 05:35:35 高大上手机用户 | 显示全部楼层   山西省忻州市
真的很好,强大,支持是必须的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表