动态数组数组名代表的是第一个元素的内存地址.
静态数组名称代表的是数组第一个元素的内存位置, 而不是数组第一个元素的内存地址.
但对于静态数组,在某些情况下编译器可能会自动取数组地址,如:
function GetWinClassName(hwnd:HWND):string; var buf1 : array[0..1023] of Char; buf2 : array[0..1023] of Char; begin SetString(Result,buf1,GetClassName(hwnd, buf1, 1023)); SetString(Result,PChar(@buf2),GetClassName(hwnd, PChar(@buf2), 1023)); end;
function GetClassName(hWnd: HWND; lpClassName: LPWSTR; nMaxCount: Integer): Integer; stdcall;
函数 GetClassName 的第二个参数很明显是要求指针, 但是你直接用静态数组名也是可以的, 这里编译器应该做了点什么