⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pointeri.pb

📁 利用春节七天在家里写的PureBasic示例代码.基本按照C教程的章节编排.适合入门学习使用.还请大家多多提出宝贵意见 Email:haihong5995037@163.com QQ:254082
💻 PB
字号:
;//////////////////////////////////
; Amlinger
;                   by 2008 02 11
;描述:指针
;目标:指针的声明级使用
;//////////////////////////////////
;休息了几天..
;把一直很想看的 <对不起,我爱你> 看完了.
;(-^-)! 总比别人慢几拍.

;下面说一下我对PureBasic中的变量中特殊符号的理解.
;我想应该把这里的文字放到变量那一节中..
;
;不对之处还请大家给以指正 
;#变量名	常量定义
;$数字     16进制数字
;例如: 
;   $FF 255 
;   $20 32
;%数字    2进制数字
;例如:
;   %11111111 255
;   %00100000 32
;变量名$      char *
;例如:
;   Str$="123321" 
;
;@变量名	取地址
;例如:
;   取Str$的内存地址指针
;   Address.d=@Str$

;*变量名      char **???
;例如:
;   取Str$的内存地址指针
;   *Address=@Str$
;?变量名	取程序代码地址,用于编译.....
;例如:
;功能:求Lable2与Lable1之间代码的长度
Lable1:
    ! test Eax,Eax
Lable2:
Debug (?Lable2-?Lable1)
;
;关于 $ * 的变量经常会让我产生混乱的感觉.不知道大家的感觉如何
;所以我把 以 $结尾的变量理解为字符型指针变量 是系统默认的
;把以*开头的变量理解为存放地址的变量 其中也是.d而以只是换了个名字
;因为试了N次.
;   Address.d=@Str$ 和    *Address=@Str$
;   结果是相同的,只是输入输出的时候 
;Address 与 *Address 是不同的变量名.
;
;还有PureBasic访问的方法也不一样.
;具体有什么不一样..这点我讲不清楚
;大概是保存相同的内存地址,PureBasic处理方法不同
;例如:
Structure HAHA
 a.w
 b.w
EndStructure
Ar.HAHA
;可以访问结构中的字段
*Address.HAHA=@Ar.HAHA
*Address\a
*Address\b
;;不幸,下面的方法是错误的
;Address.HAHA=@Ar.HAHA
;Address\a
;Address\b


;@变量名
;作用:取变量地址
Variable1.w = 5           
Variable2 = @Variable1  
;从指定地址读取内存中的内容
Variable3=PeekW(Variable2)
;变量值
Debug "Variable1="+Str( Variable1)
;变量地址
Debug "内存地址 @Variable1="+Str(@Variable1)
;变量地址
Debug "内存地址 Variable2=@Variable1="+Str(Variable2)
;通过变量地址读取变量值
Debug "PeekW("+Str(Variable2)+")="+Str(Variable3)
;保存变量地址的内存地址 
Debug "内存地址 @Variable2="+Str(@Variable2)

Debug "内存地址 "+Str(@Variable2)+"的值:"+Str(PeekL(@Variable2))

Debug "内存地址:"+Str(@Variable2)+"->["+Str(PeekL(@Variable2))+"]->"+ Str(PeekW(PeekL(@Variable2)))


;定义一个256字符的缓冲区
Windows.s = Space(256)
Debug "缓冲区在内存中的地址:"+Str(@Windows)
;调用API获取系统目录
;GetWindowsDirectory_(缓冲区内存地址,缓冲区大小)
GetWindowsDirectory_(@Windows.s, 256)
*p=@Windows
Debug *p+1
;显示缓冲区内容
Debug Windows.s
;通过指针显示
Debug "地址["+Str(@Windows)+"]存放内容:"+PeekS(@Windows.s,256)
;下面用自定义的过程把指定地址的内容反转一下


Procedure Reverse(Address)
;功能:对指定地址字符串进行反转操作
;参数:目标地址:
;例子:Reverse(@变量)
;返回:无返回
;结果:存放在原地址中
;0.  123456789

;1.  923456781
;    *       *

;2.  983456721
;    .*     *. 
;L=SizeOf(Address)-1
L=Len(PeekS(Address))-1
For S=0 To L/2
    ;从左边读取
    n=PeekB(Address+S)
    ;从右边读取
    n1=PeekB(Address+(L-S))
    ;将左边写入右边
    PokeB(Address+(L-S), n)
    ;将右边写入左边
    PokeB(Address+S, n1)
Next S
EndProcedure

;返转字符串
Reverse(@Windows.s)
Debug Windows.s


;下面看看关于"?"在实例中的作用吧

;读取图像资源


;将包含的文字写入Data.dat中
;注意 代码总计算 PointerII.pb 的大小
;及 PointerII.pb 在 本程序中内存的起始位置
If OpenFile(0, "Data.txt")
;
;WriteData(文件号,要写入内容内存起始,写入大小)
Msg$="用OpenFile写入的文件"+Chr(13)+Chr(10)+"OpenFile将在第10节说明,以下是包含文件的内容"+Chr(13)+Chr(10)
  WriteData(0,@Msg$, Len(Msg$))
  WriteData(0,?DateiLabel1, ?DateiLabel2 - ?DateiLabel1)
;写入成功后,关闭文件
  CloseFile(0)
EndIf

;结束程序
End 

DateiLabel1:
IncludeBinary "PointerII.pb"
DateiLabel2:












; IDE Options = PureBasic 4.10 (Windows - x86)
; CursorPosition = 164
; FirstLine = 141
; Folding = -

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -