知识点1:UIntPtr = NativeUInt = Pointer = Handle 随程序的位数改变而改变。如下

所以以后再用指针的时候要这样:UintPtr/NativeUInt(实例) = 栈中指针内存编号

以下是代码研究:

unit Unit5;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type
TForm5 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; /// <summary>
/// 定义一个类,测试隐式转换
/// </summary>
TPerson = class
function makeLove(const i: Integer): string; overload;
//function makeLove(const i: Int32): string; overload; // Integer = int32 所以这个重载会报错
function makeLove(const i: IntPtr): string; overload; // IntPtr <> int32 因为 它与程序的位数有关,所以允许重载.
function makeLove(const i: Int64): string; overload; // uint32、uint 无符号整型,由于integer会溢出,隐式转换到了这个重载上.
end; var
Form5: TForm5; implementation {$R *.dfm} (*===============以下有无符号整型============= *) //Integer = Int32; 有符号32位整型; 两种表示法
function a1(const i: Integer): string;
begin
Exit(i.ToString);
end; function a2(const i: Int32): string;
begin
Exit(i.ToString);
end; //int64 只有一种表示法
function a3(const i: Int64): string;
begin
Exit(i.ToString);
end; // IntPtr = NativeInt 表示有符号整数,若程序是32位的则表示 integer , 若程序是64位的 则表示 int64
function a4(const i: IntPtr): string;
begin
Exit(i.ToString);
end; function a5(const i: NativeInt): string;
begin
Exit(i.ToString);
end; (*===============以下是无符号整型============= *) //UINT = UInt32 = Cardinal; 无符号32位整型; 三种表示法
function b1(const i: UINT): string;
begin
Exit(i.ToString);
end; function b2(const i: UInt32): string;
begin
Exit(i.ToString);
end; function b3(const i: Cardinal): string;
begin
Exit(i.ToString);
end; function b4(const i: UInt64): string;
begin
Exit(i.ToString);
end; // UIntPtr = NativeUInt 表示无符号整数,若程序是32位的则表示 UInt32 , 若程序是64位的 则表示 UInt64
function b5(const i: UIntPtr): string;
begin
Exit(i.ToString);
end; function b6(const i: NativeUInt): string;
begin
Exit(i.ToString);
end; procedure TForm5.Button1Click(Sender: TObject);
var
a: Integer;
b: Cardinal;
c: UInt64;
pp: TPerson;
begin
a := ;
b := ;
c := ;
pp := TPerson.Create;
try
pp.makeLove(a);
pp.makeLove(b); //由于 integer会溢出, 所以这里 隐式 把 b 转换成了 int64, 然后调用了 int64的重载
pp.makeLove(c); //这里隐式转换了 但是 这样不安全会发生溢出的现象, delphi 没有那么完美了!! //如果想操作指针的话,那么用 UIntPtr 与 NativeUInt 是最合适的,Handle Pointer 都与 等同于 UIntPtr NativeUInt 随程序的位数 改变而改变
//UIntPtr(pp) = pp 的 栈中指针
//NativeUInt(pp) = pp 的 栈中指针 //由于大多数人,都是开发32位程序,而为了最大程度兼容 integer这个 类型,所以很多方法 都是用 int64做入参 ,比如: function abc(const a: int64);
//那么这个方法 就是可以接收 integer int64 与 32位程序的指针(指针会被隐式转换为int64,不溢出因为int64足以包括它了),我师傅 就是这么干的.
finally
pp.Free;
end;
end; { TPerson } function TPerson.makeLove(const i: Integer): string;
begin
Exit(i.ToString);
end; function TPerson.makeLove(const i: IntPtr): string;
begin
Exit(i.ToString);
end; function TPerson.makeLove(const i: Int64): string;
begin
Exit(i.ToString);
end; end.

关于整型Integer、Int32、Int64、IntPtr、UINT、UInt32、Cardinal、UInt64、UIntPtr、NativeUInt、Pointer、Handle的更多相关文章

  1. GO语言学习——基本数据类型——整型、浮点型、复数、布尔值、fmt占位符

    基本数据类型 整型 整型分为以下两个大类: 按长度分为:int8.int16.int32.int64 对应的无符号整型:uint8.uint16.uint32.uint64 其中,uint8就是我们熟 ...

  2. 【sqli-labs】 less35 GET- Bypass Add Slashes(we dont need them) Integer based (GET型绕过addslashes() 函数的整型注入)

    整型注入不用闭合引号,那就更简单了 http://192.168.136.128/sqli-labs-master/Less-35/?id=0 union select 1,database(),3% ...

  3. C#中int short Int16 Int32 Int64区别

    Java中没有Int32,Int64,,java中只有int,short,long Java中int就代表Int32 ,short就代表Int16,long就代表Int64 首先,几个基本的关键字: ...

  4. GOLANG 基本数据类型 整型

    基本数据类型-整型 种类     有符号(负号)      int8 int16 int32 int64 无符号(无符号) uint8 uint16 uint32 uint64 架构特定(取决于系统位 ...

  5. Go语言类型(布尔、整型、数组、切片、map等)

    1.基本类型 布尔类型:bool 注意:布尔类型不能接受其他类型的赋值,不支持自动或强制的类型转换. 整型:int8.byte(uint8).int16.int.uint.uintptr int.ui ...

  6. [日常] Go语言圣经--作用域,基础数据类型,整型

    go语言圣经-作用域 1.一个声明语句将程序中的实体和一个名字关联,比如一个函数或一个变量 2.一个变量的生命周期是指程序运行时变量存在的有效时间段;声明语句的作用域对应的是一个源代码的文本区域,它是 ...

  7. Docs-.NET-C#-指南-语言参考-关键字-内置类型-值类型:整型数值类型

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-内置类型-值类型:整型数值类型 1.返回顶部 1. 整型数值类型(C# 参考) 2019/10/22 “整型数值类型”是“简单类型”的 ...

  8. golang的数据类型之整型类型

    数据类型: 整数 : int, int32, int64, uint, uint32, uint64 字符串 : string 布尔:bool 浮点:float32 float64 uint 表示无符 ...

  9. go中整型的用法小结

    示例 // 整型的用法小结 // 注意: // 整型变量在使用时,遵循保小不保大的原则 // 尽量使用占用空间小的数据类型 package main import ( "fmt" ...

随机推荐

  1. 解题:CF1009 Dominant Indices

    题面 长链剖分模板题 只能按深度统计,同时比DSU on tree难理解一些,但是复杂度少个log 对每个点抓出向下延伸最长的儿子叫做长儿子.在合并时用指针继承信息,对于长儿子O(1)继承,其他儿子暴 ...

  2. HDU 6071 同余最短路 spfa

    Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)To ...

  3. mysql 中的共享锁和排他锁

    共享锁(share lock) 共享锁又称读锁,是读取操作创建的锁.其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁. 如果事务T对数据A加上共享锁 ...

  4. php与Git下基于webhook的自动化部署

    前言 2018年第一篇文章,没啥技术含量,权当笔记 我们一般都会用git或者svn来管理我们的代码 每次代码更新后还要手动的去把服务器上的代码也更新一遍 项目小了还好 项目大了着实浪费时间 要是服务器 ...

  5. Ansible8:Playbook循环

    目录 1.with_items 2.with_nested嵌套循环 3.with_dict 4.with_fileglob文件匹配遍历 5.with_lines 6.with_subelement遍历 ...

  6. shell比较浮点数和整数

    今天有一个朋友忽然问我在shell中,如何比较浮点数和整数,倒是把我问的一愣,在工作中确实没有遇到这个场景.我们也知道,在shell中数字的计算通常都会转换成整数,比如说1.1和1会被认为是一样的.这 ...

  7. solr基础使用概述

    概述:solr 作为搜索引擎系统,它应该包含两部分内容,分别是:索引系统 和 搜索系统. 索引系统 它主要负责将外部不同数据源的数据转换为 solr 格式规范的数据格式(我们称之为:SolrInput ...

  8. P3924 康娜的线段树

    P3924 康娜的线段树 题目描述 小林是个程序媛,不可避免地康娜对这种人类的"魔法"产生了浓厚的兴趣,于是小林开始教她OI. 今天康娜学习了一种叫做线段树的神奇魔法,这种魔法可以 ...

  9. 【转】Ubuntu+apache绑定多个域名

    1. 将 http://www.a.com 与 http://www.b.com 的DNS解析到你的服务器IP上. 2. 删除apache的默认主机配置文件.你也不希望创建2个虚拟主机后人家还能直接访 ...

  10. Linux安装python模块

    # 依赖解决 # yum -y install epel-release python-devel gcc # 安装模块 # pip install psutil  (若没有pip命令,可通过 yum ...