Sari la conținut

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

Topicul va fi automat blocat la 03:48


Postări Recomandate

  • LCS PREMIUM
Postat

** 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;
}

 

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