在C里面,有一个表达式返回值 i++相当于 function Increment(var Value: Integer): Integer; begin Result := Value; Value := Value + 1; end;++i相当于 function Increment(var Value: Integer): Integer; begin Value := Value + 1; Result := Value; end;
如果要完全模拟,那就是: //Value++ function Get_And_Increment(var Value: Integer): Integer;inline; begin Result := Value; Value := Value + 1; end;//++Value function Increment_And_Get(var Value: Integer): Integer;inline; begin Value := Value + 1; Result := Value; end;
或者Inc(i)
i++相当于
function Increment(var Value: Integer): Integer;
begin
Result := Value;
Value := Value + 1;
end;++i相当于
function Increment(var Value: Integer): Integer;
begin
Value := Value + 1;
Result := Value;
end;
//Value++
function Get_And_Increment(var Value: Integer): Integer;inline;
begin
Result := Value;
Value := Value + 1;
end;//++Value
function Increment_And_Get(var Value: Integer): Integer;inline;
begin
Value := Value + 1;
Result := Value;
end;
InterlockedIncrement (Uses Windows;)原型:
function InterlockedIncrement(var I: Integer): Integer;inline;
asm
MOV EDX,1
XCHG EAX,EDX
LOCK XADD [EDX],EAX
INC EAX
end;
++i,相当于InterlockedIncrement(i);
i++,相当于InterlockedExchangeAdd(i,1);
inc(i);
U[i];i++:
U[i];
inc(i);先用后‘+’和先‘+’后用,不必计较,只是个初值选择的问题
既然value : integer在子函数的声明中出现,那么应该是子程序范围内可见的变量,似乎应该每次调用时Value的值都是传过来的,而value := value + 1;似乎只对value这个子程序范围内的变量可操作,至于传过来的变量不应该一同被改变啊? 可是如此进行测试发现,传入的一个变量,在处理完后真的被改变了,难道是按照参数地址传递的么?