Tablouri și Pointeri

Curs
10/10 (4 voturi)
Domeniu: Calculatoare
Conține 1 fișier: doc
Pagini : 11 în total
Cuvinte : 3242
Mărime: 30.29KB (arhivat)
Cost: Gratis

Extras din document

2. Pointeri.

Un pointer este o variabila care are ca valori adrese ale altor variabile, sau mai general adrese de memorie.

Un pointer este asociat unui tip de variabile, deci avem pointeri catre int, char, float, etc.

În general o variabila pointer p catre tipul T se declara:

T *p;

Un tip pointer la tipul T are tipul T*.

Exemple:

int j,*pj; /*pj este o variabila de tip pointer la întregi*/

char c, *pc;

Se introduc doi noi operatori:

• operatorul de adresare & - aplicat unei variabile furnizeaza adresa acelei variabile

pj=&j; /* initializare pointer */

pc=&c;

Aceste initializari pot fi facute la definirea variabilelor pointeri:

int j, *pj=&j;

char c, *pc=&c;

O greseala frevent comisa o reprezinta utilizarea unor pointeri neinitializati.

int *px;

*px=5; /* gresit, pointerul px nu este initializat (legat

la o adresa de variabila întreaga */

Pentru a evita aceasta eroare vom initializa în mod explicit un pointer la NULL, atunci când nu este folosit.

• operatorul de indirectare (dereferentiere) * – permite accesul la o variabila prin intermediul unui pointer. Daca p este un pointer de tip T*, atunci *p este obiectul de tip T aflat la adresa p.

În mod evident avem:

*(&x) = x;

&(*p) = p;

Exemplu;

int *px, x;

x=100;

px=&x; // px contine adresa lui x

printf(“%dn”, px); // se afiseaza 100

Dereferentierea unui pointer neinitializat sau având valoarea NULL conduce la o eroare la executie.

3. Pointeri void.

Pentru a utiliza un pointer cu mai multe tipuri de date, la declararea lui nu îl legam de un anumit tip.

void *px; // pointerul px nu este legat de nici un tip

Un pointer nelegat de un tip nu poate fi dereferentiat.

Utilizarea acestui tip presupune conversii explicite de tip (cast). Exemplu:

int i;

void *p;

. . .

p=&i;

*(int)p=5; // ar fi fost gresit *p=5

Exemplul 17: Definiti o functie care afiseaza o valoare ce poate apartine unuia din tipurile: char, int, double.

#include <stdio.h>

enum tip {caracter, intreg, real};

void afisare(void *px, tip t) {

switch(t) {

case caracter:

printf("%cn", *(char*)px); break;

case intreg:

printf("%dn", *(int*)px); break;

case real:

printf("%lfn",*(double*)px); break;

}

}

void main(void) {

char c='X';

int i=10;

double d=2.5;

afisare(&c, caracter);

afisare(&i, intreg);

afisare(&d, real);

}

4. Pointeri constanti si pointeri la constante.

In definitiile:

const int x=10, *px=&x;

x este o constanta, în timp ce px este un pointer la o constanta. Aceasta însemna ca x, accesibil si prin px nu este modificabil (operatiile x++ si (*px)++ fiind incorecte, dar modificarea pointerului px este permisa (px++ este corecta).

Un pointer constant (nemodificabil), se defineste prin:

int y, * const py=&y;

In acest caz, modificarea pointerului (py++) nu este permisa, dar continutul referit de pointer poate fi modificat ( (*py)++ ).

Un pointer constant (nemodificabil) la o constanta se defineste prin:

const int c=5, *const pc=&c;

In cazul folosirii unor parametri pointeri, pentru a preveni modificarea continutului referit de acestia se prefera definirea lor ca pointeri la constante. De exemplu o functie care compara doua siruri de caractere are prototipul:

int strcmp(const char *s, const char *d);

Preview document

Tablouri și Pointeri - Pagina 1
Tablouri și Pointeri - Pagina 2
Tablouri și Pointeri - Pagina 3
Tablouri și Pointeri - Pagina 4
Tablouri și Pointeri - Pagina 5
Tablouri și Pointeri - Pagina 6
Tablouri și Pointeri - Pagina 7
Tablouri și Pointeri - Pagina 8
Tablouri și Pointeri - Pagina 9
Tablouri și Pointeri - Pagina 10
Tablouri și Pointeri - Pagina 11

Conținut arhivă zip

  • Tablouri si pointeri.doc

Alții au mai descărcat și

Bază de date a unui catalog școlar limbajul de programare C

1. Tema proiectului Se cere sa se realizeze o baza de date care sa simuleze un catalog scolar. Pentru realizarea bazei de date se vor folosi: o...

AutoCad

APERTURE - controleazã mãrimea cursorului selector, caracteristic modului object snap. ARC - traseazã un arc de cerc de orice dimensiune. A -...

Biblioteca de Șabloane Standard

Biblioteca de Sabloane Standard (STL) asigura o abstractizare standardizata a datelor prin intermediul containerelor si o abstractizare procedurala...

Clase Derivate

1. Clase derivate. Prin mostenire, atributele unei clase de baza sunt transmise unor clase derivate. Derivarea permite definirea unor clase noi,...

Clase în Java

Clase pentru miniaplicatii Miniaplicatiile constituie extensii ale unei clase deja existente java.applet.Applet. Structura clasei unui applet...

Clase

1. Programare procedurala –Programare orientata pe obiecte. Limbajul C, ca si Pascal, utilizeaza modelul programarii structurate procedurale, care...

Comunicații internet

2.1. Stilurile caracterelor {n sfirsit pagina dvs. contine ceva, chiar daca este vorba numai de un nume. Vom analiza in continuare elementele de...

Crearea unei aplicații independente în Java

Toate aplicatiile Java contin o metoda main(), spre deosebire de miniaplicatii. class FirstApp { public static void main( String argsst) {...

Te-ar putea interesa și

Curs Programare C++

Cap 1. Reprezentarea informaţiilor 1.1 Reprezentarea numerelor întregi în sistemul binar Un număr natural se reprezintǎ ca o colecţie de cifre....

Pointeri

POINTERI Pointerul este o variabila care contine o adresa de memorie. Aceasta variabila contine adresa unei variabile. Avantajele utilizarii...

Limbajul C

În continuare vom defini un calculator, ca fiind un sistem electronic de foarte mare complexitate, capabil de prelucrarea automata a datelor de...

Programarea Calculatoarelor - 5 -

8. Tablouri si pointeri. 8.1. Tablouri cu o dimensiune (vectori). Un tablou cu o singura dimensiune este o succesiune de variabile având toate de...

Curs C++

Limbajele C si C++ sunt limbaje de programare de nivel înalt. Limbajul C a aparut în anii 1970 si a fost creat de Dennis Ritchie în...

Programarea Calculatoarelor și Limbaje de Programare

Introducere Lucrarea de faţă îşi propune să acopere, nevoile programatorului de aplicaţie inginerească care, spre deosebire de informaticianul de...

Programare II - limbajul C

Cap 1 INTRODUCERE ÎN LIMBAJUL C 1.1 Scurt istoric 1.2 Forma unui program C 1.3 Compilarea unui program C 1.1 Scurt istoric Strămoşii...

Functii, Tablouri și Pointeri în C și C++

3. Pointeri la functii. Numele unei functii reprezinta adresa de memorie la care începe functia. Numele functiei este, de fapt, un pointer la...

Ai nevoie de altceva?