全局变量与局部变量声明

程序运行时能够改变的量称为变量(Variable),变量可分为两种类型:全局变量和局部变量。

全局变量是指在所有过程和函数之外声明的变量,全局变量又分为公有(Public)变量和私有(Private)变量。公有变量可以被程序所调用,而私有变量只可以在某个单元中被访问。

局部变量是指在某个过程或事件中定义的变量。

变量的声明:

var
  变量名:数据类型;

 

 1 interface
 2 
 3 uses
 4   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 5   Dialogs, StdCtrls;
 6 
 7 type
 8   TForm1 = class(TForm)
 9     Button1: TButton;
10     procedure FormCreate(Sender: TObject);
11   private//在此处声明的变量为私有变量,它只能在本单元中被调用,而在其他单元无法被调用。
12     { Private declarations }
13     UserName: String;
14     Address: String;
15   public//在此处声明的变量为公有变量,本单元的事件,过程,函数都可以被调用,如果其他单元文件
16         //引入该单元文件,由于声明在类的成员区域中,想要访问此变量就需要先创建类的对象进行访问。
17     { Public declarations }
18     UserID: Integer;
19   end;
20 
21 var
22   Form1: TForm1;
23   Boos:string; //全局变量,引用本单元即可访问!
24 
25 implementation
26 
27 uses Unit3;
28 
29 {$R *.dfm}
30 var
31   I: Boolean;//全局变量,为本单元私有,其他单元无法访问。
32 procedure TForm1.FormCreate(Sender: TObject);
33 var//局部变量
34   InsertTable: String;
35   Users: String;

全局变量:

声明:以下解释转载于https://www.cnblogs.com/Stwo/archive/2011/07/11/2102816.html,个人存档学习。

如果我们在应用程序一个单元中的interface关键字和implementation关键字之间的区域,定义一个全局变量,假如这个单元在别的地方被引用,那么这个单元的全
局变量能够在别的地方被访问到,当然我们也可以在应用程序一个单元中的implementation关键字的后面定义全局变量,不过此时在这里定义的全局变量只能在本
单元中被访问到,也就是说它是这个单元私有的,在别的单元中将不能被访问到。全局变量在应用程序的数据区分配内存,它存在于可执行模块(EXE或DLL等)的
文件影像内部,在程序编译期就被决定,直到应用程序结束,全局变量所占用的内存地址是固定不变的。全局的非指针类型,声明后自动分配内存,并初始化值。

全局的指针类型,声明后不自动分配内存,值为nil。


局部变量:

我们可以在函数或方法(包含过程)中定义局部变量,局部变量在应用程序的栈上进行分配,并且总是在栈上分配!局部变量的内存是在函数或方法(包含过程)
被调用时分配,在函数或方法(包含过程)调用结束时其内存被释放。由于函数或方法(包含过程)在每次被调用时,栈顶可能发生变化,因此局部变量的内存地
址是变化的,局部的非指针类型,声明后自动分配内存,不初始化值,值不确定(取决与别的程序对这块内存的操作)。局部的指针类型,声明后不自动分配内存,

但会随机指向一个地址,所以地址不为nil。

这里我们不提倡用全局变量,而尽可能的用局部变量,假如必须用到全局变量,我们可以将这个全局变量在类(比如TForm)的成员区域声明或定义。

对于局部变量我们则应多加小心,由其是它在定义时不像全局变量一样被初始化,在程序中不注意则会隐藏巨大的风险,因此在使用局部变量时,一定要先

初始化,再使用!

编程语言无所谓高低级,唯适用罢了。语言结构再天花乱坠,富丽堂皇终不过CPU上的0和1。
原文地址:https://www.cnblogs.com/fansizhe/p/12602686.html