Misterios tip pchar

Bună ziua, delfinii! Astăzi vă voi spune ce fel de PCHAR este. Și cum să o utilizați în mod corect. Acest tip este menționat în toate funcțiile API, care acceptă o valoare de șir ca parametru.







După manipularea datelor este egal cu str variabila „ProgLammersclub.ru“, am act de faptul că primul caracter dintr-un șir are un indice de 1. Deoarece tipul șir de caractere și tipul de matrice de investigator similare char pot fi atribuite reciproc. Dar, atunci când atribuim o variabilă array unui șir variabil, va exista o eroare, deoarece am stabilit rigid dimensiunea matricei pentru matrice și nu știm lungimea șirului chiar și cu restricția sa.

Ei bine, dacă acest tip indică doar un singur caracter, atunci cum înțeleg funcțiile parametrii pe care i le transmitem. Este foarte simplu. Fiecare linie trecută ca parametru pentru o funcție trebuie să aibă un # 0 la sfârșit. Funcția de pointer găsește primul caracter al șirului și continuă până când se întâlnește cu caracterul # 0. Delphi automat de linie de transformare în parametrul vom specifica șirul în sine: messageBox (0, „bună“, „bună“, 0) este automată, de ce nu se declanșează automat atunci când indică variabilele nu știu. Întotdeauna scriem

Totul este normal. Același rezultat când utilizați indicii.

Acest lucru se datorează faptului că matricele sunt de obicei umplute cu zerouri.

Exemplul 1: O poveste foarte diferită:







În mesajul de dinainte este un simbol. Acest lucru se datorează faptului că numerotarea în Delphi poate începe cu orice index, în acest caz pornește 1 și nu se utilizează 0 caractere. Deci, ceea ce ți-am spus la început este greșit:

Și matricea este afișată în mod normal, deoarece Delphi guvernează automat un pointer la o matrice.

Exemplul 2: Nu știu de ce, dar în loc de deuces, nu înțeleg ce. Misticismul.

Prin urmare, este clar că inițial toate variabilele sunt umplute cu zerouri. Și variabila STR nu este o excepție.

Exemplul 4: Situația interesantă:

După cum puteți vedea în antet există simboluri "hs" apoi un pătrat apoi două. Totul are o explicație rezonabilă. STR_ARR șir se termină la zero, prin urmare, funcția nu este găsit la zero doar la liniile de capăt STR_ARR și a continuat să o STR variabilă, astfel încât STR_ARR șir avansat atât de mult timp. Pătratul de pe linia "hs" este clar din primul exemplu.

>> Tip
>> PCHAR: ^ CHAR; // de aici, de asemenea, tastați WideChar
>> PWIDECHAR: ^ WIDECHAR;

un astfel de cod va cauza o eroare - tipul din secțiunea de tip din Pascal este specificat de semnul = și nu de un colon;


>> Exemplul 2: Nu știu de ce, dar în loc de deuces nu este arătat >> înțelegeți asta. Misticismul.
>> var
>> STR_ARR: matrice [1..2] de char;
>> STR: Șir; // orice lungime
>> începe
>> str_ARR [1]: = 'h';
>> str_ARR [2]: = # 0;
>> STR: = '22' + # 0;
>> MessageBoxA (mâner, @ STR, @ str_ARR, MB_OK);

în acest scop este necesar să se ia @STR [1],

o str_ARR ar trebui să fie afișată în mod normal, deoarece este o matrice de char, nu: string, caracterele sunt stocate în ea cu octeți zero (în ciuda faptului că numerotarea din unitățile de descriere tip) în matrice pascal de octeți în memorie sunt stocate cu octetul 0-lea a structurii de date

Da, acesta este un scolar pe care unii l-au scris, uita-te la stilul de prezentare și la erorile gramaticale.

tip
PCHAR: ^ CHAR; // prin urmare scrieți și WideChar
PWIDECHAR: ^ WIDECHAR;

OBShibsy, OBShibsya. mulțumesc pentru articolul articolului







Articole similare

Trimiteți-le prietenilor: