var pSource,pDest:PChar;
len: integer;
.......................//一些代碼
Move(pSource,pDest,len); //錯誤
Move(pSource^,pDest^,len); //正確
看起來確實好像是傳值,而不是傳地址,但是各位別忘了,這不是C,C++,而是Delphi
Object Pascal,所以,絕不能從函數調用的方法判斷是傳值還是串地址!!必須看函數的
定義,只有定義才能說明是傳值還是傳地址,再說一遍,這不是C,C++!!
我們看到的函數定義是這樣的
procedure Move(const Source; var Dest; Count: Integer);
從定義上看,很清楚,Dest是傳地址,而不是傳值,那么Source呢,其實大家不太清楚
這里的Const修飾符有兩個含義,第一個大家都知道就是Source一常量方式在函數體內,
不可以改變它的值,第二個,那就是Source的傳遞方式和Dest一樣,是傳地址!也就是
說const和var一樣,都是傳地址,只不過一個在函數內不允許修改,另一個是修改后影響
調用的變量值所以Move是傳地址,而恰恰不是傳值!
舉例1:
var
Source,Dest: string;
begin
Source := '123456789';
Dest := '---------'; Move(Source[5], Dest[3], 4);
ShowMessage(Dest); {--5678---}
end;
舉例2:
Move(socket.header, socket.hdata^, sizeof(socket.header));