下面这段是网上找的:
主要有四点区别:
第一,函数往往只为求一个函数值,过程一般会被设计成求若干个运算结果,完成一系列的数据处理。
第二,函数有类型,最终要将函数值传送给函数名,过程无类型,不能给过程名赋值。
第三,调用方式不同,函数的调用出现在表达式中,过程的调用是由独立的过程调用语句实现的。
第四,返回值的方法不同,函数值是通过函数名传回调用程序,过程则是通过参数将运算的结果传给调用程序。请教这四点对吗?下面是一个简单的例子:function benben(x:integer):integer;//声明函数
var //声明函数的变量z为整型
  z:integer;
begin //函数的作用是判断x如果不小于0,则返回值为x+1,
      //如果x小于0,则返回值为x+2
  if x>=0 then z:=x+1
  else z:=x+2;
  //benben:=z;
  Result:=z;
end;procedure douya(i:integer);
begin
  if i>=0 then showmessage('x的值大于等于0')
  else showmessage('x的值小于0');
end;procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  i:=benben(-10); //调用函数,把参数-10
  Edit1.Text:=inttostr(i);
  douya(-10);
end;
这里特别是第三点:函数的调用出现在表达式中?i:=benben(-10); //调用函数,把参数-10,这是一个语句不是表达式啊
第四点:过程没有返回值啊,那么“过程则是通过参数将运算的结果传给调用程序。”是什么意思?

解决方案 »

  1.   

    不要强硬记概念。你也可以像过程一样调用函数 benben(-10);
    函数和过程最大的区别是函数有返回值。
    上面的4点概念,只是常用的习惯上的区别。第4点,指的是,把参数做为形参传递进过程,过程中改变其值。
      

  2.   

    看那条条框框的没什么意思。
    过程中的参数可以设为var从而将结果传出。
      

  3.   

    过程 无返回值,如
    procedure setvalue(value:integer);
    var
    a:integer;
    begin
    a:=value;
    end;函数有返回值,如
    function GetValue:integer;
    begin
    result:=3;
    end;
      

  4.   

    问题1: 
    i:=benben(-10) 是个表达式 也是个语句.
    应该说 函数可能出现在表达式中 而过程不可能出现在表达式中问题2:
    函数值是通过函数名传回调用程序,过程则是通过参数将运算的结果传给调用程序。
    函数名实际上是一个指针,通过这个指针来返回结果
    而过程只能通过参数来返回,一个明显的现象就是, 你有见过过程名出现在表达式的右边吗?
    没有吧 因为过程只能通过参数(Result)来返回结果.
      

  5.   

    如果 你实在不明白就记着: 函数名function有返回值,而过程procedure没有
    也就是说 如果有返回值的一定得用函数function  没返回值的得用过程procedure
      

  6.   

    主要有三点区别:
    第一,声明的语法形式不一样,函数以function为关键字,过程以procedure为关键字进行声明。
    第二,调用方式不同,函数的调用一般出现在表达式中,过程的调用不能出现在表达式中,是由独立的过程调用语句实现的。
    第三,函数有返回值,过程无返回值。