Sari la conținut

[Structuri de Date - C] Pointeri (Partea 2)

Topicul va fi automat blocat la 03:48


Postări Recomandate

  • LCS PREMIUM
Postat

** POINTERI NULI SAU INVALIZI  **

* In programare , vor exista situatii cand declaram dinamic o variabila , o folosim iar dupa va trebui sa o eliberam din memorie . In acest context (dupa eliberare) , pointerul respectiv devine INVALID si poate produce o eroare de tip runtime (In timpul rularii programului)  daca acesta este accesat accidental . 

#include <stdio.h>
#include <stdlib.h> // Pentru alocare dinamica 


int main()
{

	int* pointer;

	pointer = (int*)malloc(sizeof(int)); // Alocam in memorie o variabila de tip intreg  

	// VOM DISCUTA ULTERIOR DESPRE ALOCARE DINAMICA IN DETALIU

	*pointer = 30; // Atribuim numarul 30 ;

	
	printf("%i\n", *pointer); // Afisam 30  OK

	free(pointer); // Eliberam memoria ==> *pointer devine invalid 

	
	printf("%i", *pointer); // EROARE ==>> *Pointer DEVINE DAGGLING 

	return 0;
}

* In astfel de situatii , apelam la pointer nuli . Practic atribuim valoarea "null" acelui pointer !! 

pointer = NULL; // DUPA ELIBERAREA MEMORIEI SE RECOMANDA sa fie atrebuit cu NULL 


// SAU CHIAR LA INITIALIZARE

NOTA ** :  SE RECOMANDA CA POINTERI CARE NU  POINTEAZA UN OBIECT VALID LA INCEPUT , SA FIE NOTATI CU NULL  !!  

** Pointeri Constanti  ** 

* Pointeri constanti sunt pointeri a carora adresa nu se poate modifica dupa initializare . Pot pointa atat valori modificabile (atat variabile cat si constante) . 

#include <stdio.h>

int main()
{

	int a = 100; // Variabila 

    int b = 50;  // Constanta (NU SE POATE MODIFICA VALOAREA)

	 int* const c = &a; // Pointer Constant pointeaza o variabila 

	 const int* const d = &b; // Pointer Constant pointeaza o constanta

	 // EROARE DACA INCERCAM SA FACEM  "c = &b" sau "d = &a"  pentru ca nu putem schimba adresa de memorie

	 // A DOUA SITUATIE 

	 *c = 30; // E OK (PUTEM SCHIMBA TOTUSI VALOAREA PENTRU CA POINTEAZA O VARIABILA)

	// *d = 30;  ///  EROARE NU PUTEM MODIFICA VALOAREA DEOARECE POINTAM O CONSTANTA

	 

	 printf("%d ||  %d ", *c , *d); // Afisam  30  |  50  

	

	return 0;
}

*  Pointeri care pointeaza valori constante NU SI POT MODIFICA VALOARE DAR SPRE DEOSEBIRE DE POINTERI CONSTANTI ISI POT MODIFICA ADRESA DE MEMORIE 

#include <stdio.h>
#include <stdlib.h> // Pentru alocare dinamica 


int main()
{

	const int a = 50;

	const int* ptr = &a;

	printf("%d \n", *ptr); // Afisam 50 (CONSTANTA A)

	/// *ptr = 100; // NU PUTEM MODIFICA VALOAREA POINTERULUI CARE POINTEAZA O VALOARE CONSTANTA

	// Totusi spre deosebire de pointeri constanti putem schimba adresa de memorie !!!!

	// astfel ca 

	const int b = 100;

	ptr = &b; // E OK , PUTEM SCHIMBA ADRESA DE MEMORIE 

	printf("%d", *ptr); // AFISAM CONSTANTA B (100)

	return 0;
}

 

Alătură-te conversației

Poți posta acum și să te înregistrezi mai târziu. Dacă ai un cont, autentifică-te acum pentru a posta cu contul tău.

Vizitator
Din păcate, conținutul tău conține termeni pe care nu îi permitem. Te rugăm să editezi conținutul pentru a elimina cuvintele evidențiate de mai jos.
Răspunde la acest topic...

×   Inserat ca text bogat.   Restabiliți configurația implicită

  Doar 75 emoji sunt permise.

×   Linkul tău a fost încorporat automat.   Afișează ca link în schimb

×   Conținutul tău precedent a fost restaurat.   Curăță editor

×   Nu poți lipi imagini direct. Încarcă sau inserează imagini din URL.

  • Navigare recentă   0 membri

    • Nici un utilizator înregistrat nu vede această pagină.
×
×
  • Creează nouă...

Informații Importante

Termeni de Utilizare & Politică Intimitate