pascal语法问题,超简单-----(20分)

  • 主题发起人 主题发起人 hanpengshan_00
  • 开始时间 开始时间
H

hanpengshan_00

Unregistered / Unconfirmed
GUEST, unregistred user!
x,y :double;
//变量声明
addup(@x,@y);
//调用这个函数是想返回x,y 变跟后的值,(这样调用对吗??)
如何声明?
procedure add(???);
begin
这里如何使用那两个指针变量??? (如 c 里面的 (*x) =990;)
end;
 
x^和y^就是的了.
 
这样就可以:
procedure add(var x,y:do
uble);
begin
x := 100.01;
y := 200.01;
end;
调用就可以直接用
add(x,y)
简单的很,由于有var关键字,所以你更改了x,y后,外部程序可以获得改变后的值。
 
我同意 zqw0117 的方法,些方法简单易懂,在没有必要时千万没要用指针,这样很容易出现一些你意想不到的后果。朋友谨用。
 
zqw0117的方法适合普通大众的最好方法。
 
to zqw0117 and all:
首先申明,我是菜鸟.
就是那个procedure add(var x,y:do
uble);中的Var到底起什么作用?何时需要家这个!
我一直比较纳闷!现正好借这个机会问问!
谢谢!
 
你需要你的参数能够获取返回值的时候就要加这个了呀,
下面有些基础教程,希望适合你。
http://ycrjq.y365.com/shool/index.html
 
怎么回事,我怎么不能结束这个问题啊.是不是
 
:~(
再试试吧
 
解释一下Var关键字的意义。首先,如果是一个过程或函数内部,声明一个变量就使用Var
关键字,如下:
procedure xxx(xx:xx);
var
A: Integer;
begin
end;
看到了吗?var的意思就是变量。那么当在过程或函数的声明部分使用var就表示var
后面的参数就叫做变参,当在过程和函数内部改变变参的值的时候,当程序退出
过程和函数体后,调用这个过程和函数体时传入的参数将会获得新的值。这个有点像
VC里面的指针,实际上是Delphi自动把类型转换并自动处理了各种赋值向外部传递的
代码。
除了可以带var外,还可以带const,这时,在过程和函数内部是完全不能修改参数值的。
例如:
procedure (const s: string);
begin
s := 'aaa';
//这一句编译器会报错
end;
这里有一个窍门,当你把string类型的参数用const传递的话,实际上Delphi只会在内存
中复制字符串的指针,所以可以大大降低内存开销。如果string的参数不带const的话,
过程内部将会拷贝一次传入的参数(内存中至少有两个字符串副本)。那么你可能 要问,
如果把string用var传递的话,是不是更加省事(毕竟var也是传递指针进来的),不是,
Delphi对var的传递有额外的开销,反而不如传递const的string类型快速。
 
由于字符串的复制是引用复制,
所以加不加const对字符串来说,速度都是一样的,
并不会引起字符串的分配空间
通常认为 const 和 var 都是传递的地址 尤其是对于较大的数据类型
 
to lich:
我记得原来曾经听Another_eYes大虾说过,加const的string传递比加var或者什么都不加的string
更快,好像还有专门的讨论和测试结果,就在DFW上,不过现在我找不到了。
 

呵呵,我自己测试了一下,测试结果如下:
const: 0.307360s
none: 18.169158s
var: 3.326552s
测试代码如下,由于为了减小多任务的影响,程序的运行优先级设为最高,
所以运行时就像死机一样,耐心等待就可以了
procedure TForm1.Button1Click(Sender: TObject);
var
t1, t2, tc: Int64;
s1, s2, s3, s: String;
i: Integer;
begin
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
QueryPerformanceFrequency(tc);
s := 'this a test string, hello';
QueryPerformanceCounter(t1);
for i := 1 to 10000000do
begin
a(s);
end;
QueryPerformanceCounter(t2);
s1 := Format('%.6f', [(t2 - t1)/tc]);
QueryPerformanceCounter(t1);
for i := 1 to 100000000do
begin
b(s);
end;
QueryPerformanceCounter(t2);
s2 := Format('%.6f', [(t2 - t1)/tc]);
QueryPerformanceCounter(t1);
for i := 1 to 100000000do
begin
c(s);
end;
QueryPerformanceCounter(t2);
s3 := Format('%.6f', [(t2 - t1)/tc]);
SetPriorityClass(GetCurrentProcess, NORMAL_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_NORMAL);
ShowMessage(s1 + ',' + s2 + ',' + s3);
end;
:
 
顺便说一下计算机配置: PII392MHz SDRAM256
 
问题已经解决,谢谢大家!
我想结束这个问题给分大家,可是这里没有结束问题的对话啊!
怎么回事?
 
接受答案了.
 
后退
顶部