Administratie | Alimentatie | Arta cultura | Asistenta sociala | Astronomie |
Biologie | Chimie | Comunicare | Constructii | Cosmetica |
Desen | Diverse | Drept | Economie | Engleza |
Filozofie | Fizica | Franceza | Geografie | Germana |
Informatica | Istorie | Latina | Management | Marketing |
Matematica | Mecanica | Medicina | Pedagogie | Psihologie |
Romana | Stiinte politice | Transporturi | Turism |
Se foloseste cuvantul cheie struct urmat de numele structurii si enumerarea membrilor acesteia:
struct X
Elementele membre ale variabilelor de tip structura pot fi accesate folosind operatorul .:
struct X x1, x2[4];
x1.i=4;
x2[2].c=getch();
int *pi; /* pointer la o variabila de tip int */
char *pc; /* pointer la o variabila de tip char */
struct X *px; /* pointer la o variabila de tip struct X */
struct X x1, x2[4];
pi=&x1.i; /* atribuirea adresei unei variabile de */
px=&x2[2]; /* acelasi tip cu al pointerului */
pc=&px->c;
*pi=4; /* referirea zonei de memorie adresate de */
*pc=getch(); /* pointer cu ajutorul operatorului * */
Exista aplicatii in care necesarul de memorie nu este cunoscut din faza de compilare si rezervarea unor zone de memorie de dimensiuni acoperitoare pentru toate datele ar depasi capacitatea memoriei disponibile. Singura solutie in acest caz o reprezinta alocarea/eliberarea interactiva de zone de memorie chiar in timpul executiei programului - alocarea dinamica de memorie. In acest scop, in programele C se folosesc functii de biblioteca ale caror prototipuri (descrieri ale tipului si argumentelor functiilor) se gasesc in fisierul header alloc.h. Cele mai utilizate functii pentru alocarea de memorie sunt:
void* malloc(unsigned size);
void* calloc(unsigned nelem, unsigned size);
Prima functie primeste ca unic argument numarul de octeti ce trebuie alocati si returneaza adresa de inceput a zonei de memorie alocate in caz de succes sau NULL (0) in caz de esec. A doua functie se comporta identic, incercand insa alocarea a nelem blocuri succesive de size octeti.
Toate alocarile dinamice se fac intr-o zona de memorie destinata special acestui scop, zona numita heap (gramada). In functie de modelul de memorie folosit, dimensiunea heap-ului variaza de la dimensiunea unui segment (64KO) minus dimensiunea programului pana la dimensiunea intregii memorii disponibile minus aceeasi dimensiune a programului.
Pentru eliberarea unei zone de memorie alocate dinamic se foloseste functia complementara
void free(void* addr);
unde addr reprezinta un pointer ce contine adresa de inceput a unei zone de memorie alocata dinamic.
int *pi;
struct X *px;
/* alocare memorie pentru o variabila de tip int */
pi = (int *)malloc(sizeof(int));
*pi=3;
/* alocare pentru un vector de 4 elemente de tip struct X */
px=(struct X *)calloc(4, sizeof(struct X));
px[2]->i=4;
/* eliberare memorie */
free(pi);
free(px);
In C++, datorita utilizarii frecvente a alocarilor dinamice, rolul functiilor de alocare/eliberare memorie a fost preluat de doi operatori, new pentru alocare si delete pentru eliberare memorie. Evident, inlocuirea unor apeluri de functii cu operatori reduce timpul de executie si simplifica programele ce folosesc alocare dinamica. Mai mult, folosirea operatorilor este obligatorie in C++.
Point *p1, *p2;
p1=new Point; /* alocare spatiu pentru un obiect de tip Point */
p2=new Point[3]; /* alocare spa_iu pentru 3 obiecte Point */
/* utilizare spatiu alocat */
delete p1; /* eliberare */
delete p2;
Visual C versiunea 6 este un puternic mediu integrat (IDE) pentru dezvoltarea aplicatiilor in C/C++ pentru platforma Windows. In cadrul acestui laborator vom dezvolta aplicatii consola, si nu aplicatii Windows native.
Pentru crearea unei aplicatii in Visual C este necesara existenta unui proiect. Nu se pot compila fisiere de sine statatoare. Vom incepe cu prima aplicatie in Visual C, clasica "Hello World".
Din meniul "File/New" se pot creea noi entitati: diferite tipuri de fisiere, tipuri de proiecte sau spatii de lucru (un "workspace" este o colectie de proiecte). Noi vom alege un nou proiect, o aplicatie consola (Win32 Console Application). Campurile "project name" si "project location" trebuiesc completate. In mod implicit, proeictul nou va fi asocial unui workspace nou cu acelasi nume ca si proiectul:
Al doilea pas al "vrajitorului" consta in alegerea dintre cateva tipuri predefinite de aplicatii. In functie de alegere se generaza o parte din codul necesar aplicatiei, precum si stabilirea unor directive de compilare.
Ultimul pas este doar de verificare; ne sunt oferite detalii despre ceea ce va urma sa fie contina proiectul:
"Precompiled Header" ar putea fi tradus prin "fisier header precompilat". Este o tehnologie proprie prin care o colectie mare de fisiere header sunt parsate, iar informatiile sunt pastrate intr-un format specific care permite accesul rapid la informatiile continute in acele fisere header. In cazul in care nu este folosit acest "precompiled header", pentru fiecare fisier sursa ce trebuieste compilat toate fisierele header incluse sunt parcurse in mod independent, ceea ce consuma multe resurse (in special timp). Prin creearea acestei colectii de informatii (un fisier cu extensia .pch) se reduce timpul de compilare semnificativ. Toate fisiere .h des folosite (si care nu se modifica - de ex. Biblioteci de sistem, alte biblioteci de dimensiuni mari folosite) sunt include in acest fisier stdafx.h, iar includerea lui in fisierele sursa (cu #include "stdafx.h") duce la includerea (indirecta) a tuturor fisierelor header incluse in stdafx.h. Folosirea acestei tehnologii face obligatoriu ca prima linie utila (alta decat comentarii) din orice fisier sursa sa fie #include "stdafx.h", in caz contrar fiind generata o eroare. In mod independent se poate stabili folosirea sau nu a acestei tehnologii pentru fiecare fisier sursa din setarile proiectului.
In partea stanga (de obicei) se poate observa un control cu doua pagini (in figura). Aceste doua pagini ne confera acces facil si informatii despre proiect. "ClassView" contine clasele, structurile si functiile folosite in cadrul proiectului. Un click dreapta pe fiecare din intrarile de aici genereaza un meniu cu diferite optiuni, specifice fiecarei tip de intrare. Este oferita facilitatea modificarii modul in care sunt organizate intrarile, prin creearea unui sistem arborescent de foldere si aranjarea intrarilor cu drag-and-drop.
La FileView gasim lista fisierelor folosite in cadrul proiectului. Si aici avem meniuri dependente de entitate si posibilitatea organizarii lor.
In partea din dreapta se afla editorul. Ceea ce trebuie remarcat este facilitatea de "autocomplete". Prin apasarea concomitenta a tastelor Ctrl si Space apare o lista cu optiuni pentru completarea numelor de variabile, functii, spatii de nume ceea ce duce la o viteza mai mare de tastare si reducerea erorilor de tastare a acestor nume.
In partea de jos avem informatii despre compilare, rezultatele cautarilor de/in fisiere, etc.
Compilarea/rularea se face cu folosind intrari din meniul "Build". In cazul in care proiectul necesita compilarea si s-a ales rularea, compilarea se face automat.
Debuger-ul prezent in acest mediu integrat este foarte puternic si usor de folosit.
Sa modificam programul adaugand urmatoarele linii inainte de return:
int i=3;
int* pi= new int;
*pi = i;
Pe una din linii se introduce un breakpoint (punct de oprire al programului) din meniu sau cu F9. Se ruleaza programul, executia oprindu-se cind se junge la acea linie:
Dupa cum se poate observa, avem mai multe zone pentru observarea variabilelor. In zona "auto" se vor afisa variabilele folosite in acel punct al programului (in mod automat). In zona "local" variabilele din acea functie. In zonele "watch" se pot adauga variabilele/expresiile dorite ce vor fi monitorizate pe tot parcusul rularii. In timpul rularii in mod debug apare un nou menu (Debug) cu intrarile uzuale pentru aceasta operatie (step in, step out, step over, run to cursor, etc). In meniul View/Debug windows pot fi adaugate/ascunse o serie de astfel de ferestre in care se afla informatii utile despre executia programului (memory, variables, call stack, registers, etc).
Una din alte facilitatile modului de debug este captarea diferitor exceptii ce pot apare la rularea programului. Ne vom opri la cele de tipul "access violation" (folosirea unei zone de memorie in mod impropriu). Sa incercam sa folosim pointerul pi fara a-l aloca in prealabil:
int i=3;
int* pi;
*pi = i;
La rularea va apare urmatoarea fereastra de avertizare:
Daca apasam "ok" vom fi dusi la linia de cod la care s-a produs exceptia (modul debug si stoparea executiei programului sunt facute automat).
Valorea "0xcccccccc" a lui pi denota faptul ca acel pointer nu a fost initializat (la rularea programului pi va avea o valoare aleatoare).
Realizati un program care sa citeasca de la tastatura un numar intreg, n, si sa afiseze valorile 1+2+..+n-1+n si n!
Realizati un program care sa citeasca de la tastura linii de text de maxim 80 de caractere pana se introduce o linie goala. Sa se afiseze aceste linii sortate dupa lungimea lor.
Acest document nu se poate descarca
E posibil sa te intereseze alte documente despre:
|
Copyright © 2024 - Toate drepturile rezervate QReferat.com | Folositi documentele afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul document pe baza informatiilor de pe site. { Home } { Contact } { Termeni si conditii } |
Documente similare:
|
ComentariiCaracterizari
|
Cauta document |