UP 先....你想要哪方面的?不是什么方面的问题 是在看VCL代码和看别人的源代码的时候 每当看见别人很灵活的定义过程和函数的参数 都摸不着头脑他门为什么要那么定义和定义了干什么用 这可能是我县市最薄弱的技术点
1、procedure test(const n: integer); begin n := n + 3; //这是不允许的 end; 2、procedure test(n: integer); begin n := n + 3; //这是允许的,n相当于过程里面的局部变量 end; 3、procedure test(var n: integer); begin n:=n + 3; end; 3、a=4,则test(a)执行过后,a=7! 2、a=4,则test(a)执行过后,a=4! 参数是通过寄存器传递的,多了就不够用了^__^
比如这样的参数 function readclient(var buffer;count;integer);ingeger;override; //(var buffer;count;integer); 这两个参数干什么用的 用户什么时候把这两个参数用什么形式传进去
是在看VCL代码和看别人的源代码的时候
每当看见别人很灵活的定义过程和函数的参数
都摸不着头脑他门为什么要那么定义和定义了干什么用
这可能是我县市最薄弱的技术点
begin
n := n + 3; //这是不允许的
end;
2、procedure test(n: integer);
begin
n := n + 3; //这是允许的,n相当于过程里面的局部变量
end;
3、procedure test(var n: integer);
begin
n:=n + 3;
end;
3、a=4,则test(a)执行过后,a=7!
2、a=4,则test(a)执行过后,a=4!
参数是通过寄存器传递的,多了就不够用了^__^
function readclient(var buffer;count;integer);ingeger;override;
//(var buffer;count;integer);
这两个参数干什么用的
用户什么时候把这两个参数用什么形式传进去
这两个就是实际参数
begin
xxx吃食物参数; //对食物参数进行操作
end;
调用函数时,传入参数
吃食物(水果);这时程序执行xxx吃水果操作
吃食物(饼干);这时程序执行xxx吃饼干操作
传入的饼干或水果就是实际要操作的数据,而函数里定义的食物参数只是一个模型,当然这个模型就是你需要进行某种操作而定义出来的,没有这个模型你也就进行不了相关的操作了(除非是无参数函数)
形参定义时还有传值和传址两种,简单的说传值就是数据的值只带进函数里,调用函数后,传入的参数值是不变的(就像上面水果还是水果,饼干还是饼干),而传址就是带进又带出函数,离开函数后,传入的参数值是改变的
无类型的参数、开放数组参数。 不管是哪一种参数类型,在调用过程或函数时,实参跟形参在个数上必须相同,在数据类型上必须赋
值相容。-------------------------------------------------------------------------------- 数值参数
数值参数是一种最常见的参数,当调用过程或函数时,程序把实参的值复制一个副本,传递给数值参
数,数值参数对过程或函数而言是局部变量,对数值 参数的修改不会直接改变实参的值。
注意:作为实参传递给数值参数的值不能是文件类型或包含文件类型的构造类型。-------------------------------------------------------------------------------- 常量参数
常量参数跟数值参数的区别在于,常量参数是只读的,也就是说不允许在过程或函数中改变中改变常
量参数的值,对常量参数赋值是非法的,并且不允许把常量参数再作为实参传递给另一个过程或函数。例
如下列程序中包含了不合法的代码:
Procedure Myproc(Const Value:Integer);
{参数名前加Const表示是常量参数}
Begin
Value:=3;{非法!因为不允许对常量参数赋值}
AnotherProc(Value);{非法,常量参数不能再作为实参传递给另一个过程或函数}
End;-------------------------------------------------------------------------------- 变量参数 变量参数有点像C++的引用,参数在传递时传递的不是实参的副本, 而是实参的地址,
这 样当参数在过程或函数中被改变时,实参的值也相应改变,在过程或函数中对形参的引用实际上就是
对实参自身的引用。
程序示例如下:
procedure MyProc(Var Value:Integer);
{参数名前加VAR表示是变量参数}
Begin
Value:=3;
End;
Procedure TForm1.Button1Click(Sender:Tobject);
Var X:Integer;
Begin
X:=2
Myproc(X);
End;
当形参是变量参数时,实参也必须是一个变量而不能是一个表达式,例如上例中这样调用就是非法
的:MyProc(2);另外实参跟形参的数据类型必须完全 一致而不仅仅是赋值相容。
当形参是变量参数时,实参可以是文件类型或包含文件类型的构造类型。
当参数是构造类型时,使用变量参数具有优势,因为如果使用数值参数,在调用时必须分配足够大
的内存空间来存放实参的副本,当参数比较庞大时,将花费大量的空间和时间,而使用变量参数时,传
递的仅仅是实参的地址,其效率是显而易见的。-------------------------------------------------------------------------------- 无类型参数 所谓无类型参数,就是在过程或函数声明和定义时不指定参数的数据类型,程序示例
如下:
Procedure MyProc(Var Value);
上例中,Value参数没有指定数据类型,但前面必须加Var或const,加Var表示参数的值是可以改
变的,加Const表示参数是只读的。
当参数是无类型参数时,实参可以是任意数据类型的变量或表达式,使用无类型参数可以使程序
编制更加灵活,但也给编译器带来麻烦,因为它没法对 参数进行合法性检查。
正因为参数是无类型的,因此在使用前最好先进行类型强制转换,把它转换成某种特定的数据类
型,程序示例如下:
Procedure Myproc(Var Value);
Type
TMyArray=arrayp[1..10] of Integer;
Var I:integer;
Begin
for i:=1 to 10 Do TmyArray(Value)[i]:=i;
End;
怎不结贴?