Domanda

Il mio piano è quello di fare una funzione che recupera l'elemento più alto di un oggetto, per così dire, la gamma superiore di un array.In altre parole, sto cercando di ottenere il codice della funzione di Alto ().

Quello che ho provato finora:

 function High2(var X):integer;
 begin
   Result:=Pbyte(Cardinal(@X)-1)^-1;
 end;

La funzione sopra dovrebbe leggere il valore (lunghezza) prima della posizione del primo elemento nell'oggetto (array / stringa) e restituisce diminuita del 1.However Esso non recupera risultati corretti né sulla matrice di tipo statico né dinamico .

Come faccio a ricreare la funzione di Alto () in Pascal?

È stato utile?

Soluzione

Non capisco perché ci si vuole farlo quando Delphi ha già una funzione di compilatore magia built-in alto (), ma non male, qui va.

array statici: non si può fare. Nessuna informazione dimensioni sono memorizzate in fase di esecuzione in quanto la dimensione è noto per il compilatore e non può cambiare. Alto () appena scende il numero necessario nel codice come costante.

array dinamici: il compilatore traduce alto a una chiamata a DynArrayHigh nell'unità di sistema, che restituisce DynArrayLength - 1. passaggi DynArrayLength indietro 4 byte dall'inizio della matrice (si sta solo indietreggiando 1) e restituisce la lunghezza come numero intero invece di un byte.

Spero che questo è utile. Perché non stai usando solo alta, BTW?

Altri suggerimenti

Le funzioni Alta () (e Basso ()) sono indicati come "funzioni standard", che significa che sono intrinseche al compilatore. Come Scrivere e Writeln, non esistono in realtà come normali dichiarazioni di funzioni Pascal. Il compilatore assicura che rientrano nell'ambito dell'unità "System" solo per comodità e per consentire la funzione dello stesso nome all'interno di altri ambiti. Questo permette anche di qualificarli utilizzando System.High () per fare riferimento in modo esplicito alla versione dell'unità di sistema. Poiché sono intrinseco, il compilatore genera automaticamente la sequenza di codice per il tipo considerato. Questo significa anche che il tentativo di duplicare la funzionalità completa di loro è quasi impossibile. Basta attaccare con le funzioni standard intrinseche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top