全局变量与局部变量声明
程序运行时能够改变的量称为变量(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)的成员区域声明或定义。
对于局部变量我们则应多加小心,由其是它在定义时不像全局变量一样被初始化,在程序中不注意则会隐藏巨大的风险,因此在使用局部变量时,一定要先
初始化,再使用!