Variabile de tip pointeri în C
Pointerii sunt variabile care țin o adresă.
Mai ştiinţific spus un pointer este o variabilă a cărui valoare este adresa altei variabile şi care îţi oferă oportunitatea de a accesa orice locaţie de memorie (din punctul acesta de vedere e destul de periculos, dar dacă ştii ce “meştereşti” nu ar fi nici o problemă).
Tipuri de pointeri
Exista doua tipuri de pointeri:
– pointeri la un obiect
– pointer la o funcție
#include "stdio.h"<br /><br />void main ()<br />{<br /> int var = 23; /* declaratia variabilei */<br /> int *ip; /* declaratia variabilei pointer */<br /><br /> ip = &var; /* stocheaza adresa variabilei var in variabila pointer ip*/<br /><br /> printf("Adresa variabilei var este: %pn", &var ); /*%p afiseaza pointer , <br /> in cazul acesta adresa variabilei var */<br /><br /> /* Adresa stocata in variabila pointer */<br /> printf("Adresa variabilei var stocata in ip este: %pn", ip );<br /><br /> /* Accesarea valorii variabilei folosind pointerul */<br /> printf("Valoare variabilei (*ip) este: %dn", *ip );<br />}<br />
Documentație
Alte informaţii despre pointeri
https://www.programiz.com/c-programming/c-pointers
Pentru afisearea unui pointer se foloseste %p, nu %x.
E incorect spus "Adresa variabilei stocata in ip este" pentru ca ip nu stocheaza o variabila ci o adresa.
E de asemena incorect spus "Valoare de la adresa data de *ip" pentru ca *ip nu e o adresa.
E redundant sa scrii "ip = &var;" si imediat apoi sa afisezi ip si &var. De vreme ce tocmai le-am egalat, e evident ca vor fi identice.
"Pentru afisearea unui pointer se foloseste %p, nu %x."
%x afișează un număr în hex. Vreau sa afişez adresa în hexa . Care ar fi problema ?
"E incorect spus "Adresa variabilei stocata in ip este" pentru ca ip nu stochează o variabila ci o adresa."
Pai clar ca ip nu stochează o variabila ci adresa ei. Chiar asta am vrut sa evidențiez.
"E de asemena incorect spus "Valoare de la adresa data de *ip" pentru ca *ip nu e o adresa."
Corect. O să modific.
"E redundant sa scrii "ip = &var;" si imediat apoi sa afisezi ip si &var. De vreme ce tocmai le-am egalat, e evident ca vor fi identice."
E doar un exemplu. Nu are neapărat utilitate practică.
"%x afișează un număr în hex. Vreau sa afişez adresa în hexa . Care ar fi problema ?"
Citeste primul raspuns de aici: http://stackoverflow.com/questions/2369541/where-is-p-useful-with-printf
Ok. Am corectat.
Mulțumesc pentru comentariile constructive 🙂