Jump to content

Recommended Posts

  • Moderators
Posted

** Introducere in Pointeri ** 

* Pointeri reprezinta variabile compuse care retin adresa altor variabile . 

* Ei sunt folositi pentru alocarea dinamica a variabilelor dar si pentru transferul parametrilor (functii) prin referinta . (Daca dorim sa modificam parametrii in subprogram) ;

* Este un concept solid gasit doar in C/C++ (si partial in C#) deoarece pot duce la situatii complexe si erori , daca nu sunt gestionati cum trebuie ; 

** Operatorul "&" **

* Operatorul '&' ,  insotit de oricare variabila , ne furnizeaza locatia de memorie a acesteia . 

* Spre exemplu

#include <stdio.h>


int main()
{
	int variabila; // Declaram o variabila de tip intreg 

	printf("%p", &variabila); // Afisam adresa de memorie a acestei variabile 

	return 0;
}

* Primim ca output locatia de memorie

Citat

00000038880FF704

* NOTA : Prin acest operator , pointerul poate obtine adresa de memorie a variabilei pe care o pointeaza . 

** Operatorul '*'  ** 

* Operatorul '*' , insotit de numele variabilei si tipul de date , ne indica o variabila de tip pointer ; 

int* pointer; // Declaratie variabila de tip pointer (Poate stoca adresa de memorie a altei variabile de tip int )

* Operatorul '*'  poate fi interpretat si ca operatorul de referentiere astfel ca putem obtine valoarea adresei pe care o pointeaza

#include <stdio.h>


int main()
{
	int variabila = 100 , *variabilePointer; // Declaram o variabila de tip intreg  si un pointer de tip intreg

	variabilePointer = &variabila; // Obtinem adresa de memorie a variabilei (Pointam "variabila") 


	printf("%d", *variabilePointer); // Afisam valoarea variabilei 

	return 0;
}

* Si obtinem in output valoarea variabilei :

Citat

100

* Daca efectuam modificari pe valoarea stocata de variabila Pointeri se va modifica asemenea si valoarea variabilei simple !!! 

#include <stdio.h>


int main()
{
	int variabila = 100 , *variabilePointer; // Declaram o variabila de tip intreg  si un pointer de tip intreg

	variabilePointer = &variabila; // Obtinem adresa de memorie a variabilei 

	*variabilePointer = 50; // Modificam valoarea variabilei POINTER 


	printf("%d", variabila); // Obtinem 50 deoarece pointerul stocheaza adresa de memoriei a variabilei automat se va modifica si valoarea !!!

	return 0;
}

** Dimensiunea in memorie a pointerilor **

* Indiferent de tipul de date pe care l poate stoca , pointerul ocupa in memorie 4 biti (arhitectura x86 -  32 biti) sau 8 biti (arhitectura x64 - 64 biti) 

#include <stdio.h>


int main()
{
	int* ptr1;

	double* ptr2;

	char* ptr3;

	float* ptr4;

	printf("%zu |  %zu |  %zu  | %zu", sizeof(ptr1), sizeof(ptr2), sizeof(ptr3), sizeof(ptr4));

	// Vom Obtine   8 |  8 | 8 | 8   (Arhitectura x64)  indiferent de tipul de date pe care l stocheaza

	return 0;
}

 

Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

Terms of Use & Privacy Policy