Transmiterea argumentului structurii

Deasupra structurilor sunt permise astfel de "operațiuni":

!Este imposibil să comparăm structurile.

Copierea corespunde transferului unei structuri printr-un argument către o funcție.

Alocarea corespunde revenirii structurii ca rezultat al funcției.







Există trei modalități de a transfera structurile unei funcții și de a reveni din ea:

  1. transferul separat al membrilor săi;
  2. transmiterea structurii este completă;
  3. trecând un pointer la structură.
Exemplul 10: obiecte pentru care vom efectua operații cu structuri. obiecte de tipul __________________________________________________________________ "Punctul" "dreptunghi" __________________ | _______________________________________________ Punctul Struct. | Struct Rect; | __________________ | _______________________________________________

Folosind obiecte de acest tip, vom scrie mai multe funcții.

Exemplul 11: formarea unui punct prin componentele sale. struct punct makepoint (int x, int y)

Definiți cu această funcție obiectul "ecran" (ca dreptunghi dimensiunea monitorului de ecran).


Obiectul "mijlocul ecranului" (ca punct cu coordonatele centrului ecranului).

Exemplul 12: formarea de obiecte "ecran" i "mijlocul ecranului". # Definiți MAXX 639 # Definiți MAXY 349 # Definiți MINX 0 # Definiți MINY 0. struct rect screen; / * obiect "ecran" * / struct punctul de mijloc; / * Obiect "ecran de mijloc" * / punctul struct makepoint (int, int); / * Crearea colțul din stânga sus al obiectului "ecran": * /screen.pt1 = makepoint (MINX, MINY); / * Crearea colțul din dreapta jos al obiectului " ecran ": * /screen.pt2 = makepoint (MAXX, Maxy); / * Creare obiect" de mijloc a ecranului: * / middle = makepoint ((screen.pt1.x + screen.pt2.x) / 2, (Screen.pt1 .y + screen.pt2.y) / 2); Exemplul 13: adăugarea punctului struct punctul ADDP (struct punct p1, struct punctul p2).

Pentru a forma rezultatul, se folosește structura trecută de primul argument. Acest lucru este acceptabil, deoarece structura este transmisă funcției ca o copie. Prin urmare, spre deosebire de makepoint, nu aveți nevoie de o variabilă locală de tip struct pentru a genera rezultatul.

Exemplul 14: Punctul p aparține dreptunghiului r? pt_in_rect (struct point p, struct rect r) / * Rezultatul nu este 0 dacă punctul p aparține dreptunghiului r. altfel rezultatul este 0 * /







Indicatorii pentru structuri nu diferă de indicii la variabilele obișnuite.

Exemplul 15: indicii spre punctul de struct * ps; / * pointer la structura * / struct point t; structul punctului makepoint (int, int); t = structul makepoint (15, 25); ps = t; / * * Ps este structura lui t (* Ps). X = 15 (* Ps). Y = 25 * / printf ("Aceasta este t: (% d,% d)", (* ps).

Parantezele din acest exemplu sunt necesare deoarece prio (.)> Prio (*).

<Указатель на структуру> -> <имя члена структуры>

Dacă p este un indicator al structurii. apoi r -> <член структуры> - acesta este penisul ei.

Proprietățile operatorului ->:

  • binar;
  • infiksny;
  • prioritate maximă;
  • livoasotsiativny.
Exemplul 16: Echivalentul din exemplul 15. printf ("Aceasta este t: (% d,% d)", ps -> x, ps-> y) r; / * Echivalent: * / 1) r.pt1.x2) pr-> pt1.x3) (r.pt1). X4) (pr-> pt1). X Exemplul 18: transferul de structură prin argumentul reference.main () struct point makepoint (int, int); void put (struct point *); p = makepoint (10, 12); pune ( p);> void put (punctul struct *) Exemplul 19: Utilizarea mai multor operatori la rabotyso structuri date prioritare operatorov.struct * P + + P-> len; / * len + +, și nu p + + * / + + (P-> len); / * este echivalent cu * / (+ + P) -> len; / * 1) + + p; (mergeți la linia următoare) * / / * 2). len; (ia lungimea) * / (P ++) -> len; / * 1). len; (ia lungimea liniei) * / / * 2) p + +; (mergeți la linia următoare) * / p + + -> len; / * este echivalent cu * / * P-> str; / * * p-> str (ce se referă str-str [0]) * / * (P-> str); / * este echivalent cu * / * P-> str + +; / * 1) * p-> str (ce se referă str-str [0]) * / / * 2) str + +; / * (Mergeți la elementul următor - str [1]) * / (* P-> str) + +; / * 1) * p-> str (ceva care se referă str - str [0]) * / / * 2) o creștere a unui cod de caracter, care este conținut în str [0]) * / * P + + -> str; / * 1) * p-> str (ce se referă str-str [0]) * / / * 2) p + +; (mergeți la următoarea linie) * /

Argumentele liniei de comandă

La linia de comandă a executabilului, puteți să transmiteți argumente, scriându-le printr-un spațiu. Aceste argumente, care sunt scrise pe linia de comandă, sunt reale pentru funcția principală. Argumentele oficiale pentru funcția principală sunt create de OS. Prin urmare, în funcția principală, trebuie să le puteți procesa.

Argumentele (formale) principale:

  • argc (numărul de argumente): numărul de argumente ale liniei de comandă;
  • argv (vector argument): Un pointer la o serie de șiruri care conțin cele mai multe argumente.
Exemplul 20: program de ecou pentru tipărirea argumentelor liniei de comandă, care sunt separate de un simbol _ (pentru a distinge șirul rezultat de cel de intrare). Dacă linia de comandă conține C:> echo Funcția principală este că programul de ecou va imprima C:> echo_Head_Function

Pentru programul ecou, ​​sistemul de operare va construi astfel de argumente actuale:

! Argumentele din linia de comandă sunt șiruri de caractere.







Trimiteți-le prietenilor: