Professional Documents
Culture Documents
Exemple Pointer in C
Exemple Pointer in C
int* pc, c; //am declarat un pointer (de tip 'int')'pc' si o variabila 'c' (de ac. tip)
c = 5;
printf("%d", *pc); // Output: 5, cu '*' aflam valoarea variabilei stocata la adresa la care gasim
//pointerul (asociat variabilei)
CONCLUZIE:
- '&' pentru aflarea adresei variabilei si/sau asocierea cu un pointer anterior definit
ALT caz: cum am putea schimba valoarea unei variabile utilizand un pointer
int* pc, c;
c = 5;
pc = &c;
*pc = 1; //alocam valoarea 1 prin citirea valorii pointerului asociat var. c si apoi
cu //'=' se asociaza noua valoare pe care o vom gasi la adresa respectiva
ALT caz: asociem pointerul definit pe rand la cate o variabila, se observa schimbarea valorii (cat si a
adresei) dupa a doua asociere:
int* pc, c, d;
c = 5;
d = -15;
pc = &c; printf("%d", *pc); // Output: 5
#include <stdio.h>
int main()
int* pc, c;
c = 22;
pc = &c;
c = 11;
*pc = 2;
return 0;
}
va avea iesirea:
Address of c: 2686784
Value of c: 22
Address of c: 2686784
Value of c: 2
pc = c; // Error
SI o echivalenta:
int *p = &c; eq. Cu expresiile: int *p; p = &c;
TRECEM la vectori (arrays), sa citim adresele unde se gasesc elementele unui vector:
#include <stdio.h>
int main() {
int x[4];
int i;
printf("Address of array x: %p", x); //cu '%p' afisam adresa de inceput a vectorului care este
//de fapt adresa primului element.
return 0;
va avea iesirea:
&x[0] = 1450734448
&x[1] = 1450734452
&x[2] = 1450734456
&x[3] = 1450734460
//se observa ca adresele sunt din 4 in 4 bytes, compilatorul a alocat aceasta cantitate de memorie
pentru fiecare element al vectorului pentru ca e de tip 'int'
UN mic exemplu prin care folosim pointer pentru a defini elem. unui vector si de a calcula suma
acestor elemente:
#include <stdio.h>
int main() {
scanf("%d", x+i);
return 0;
va avea iesirea:
Enter 6 numbers: 2
12
Sum = 29
int main() {
int* ptr;
ptr = &x[2];
return 0;
va avea iesirea:
*ptr = 3
*(ptr+1) = 4
*(ptr-1) = 2
#include <stdio.h>
int main()
swap( &num1, &num2); //folosim '&' pentru a lucra cu adresele variabilelor num1 si num2
return 0;
void swap(int* n1, int* n2) //functia lucreaza cu acesti 2 parametri definiti ca pointeri
int temp;
va avea iesirea:
num1 = 10
num2 = 5
int main()
int* p, i = 10;
p = &i;
addOne(p);
printf("%d", *p); // 11
return 0;
}
INTRODUCERE SI ACCESARE elemente vector utilizand pointeri:
#include <stdio.h>
int main() {
int data[5];
return 0;
va avea iesirea:
Enter elements: 1
You entered:
const int MAX = 3; // constanta de tip integer egala cu nr. de elemente ale vectorului 'var'
int main () {
ptr = &var;
ptr++;
return 0;
const int MAX = 3; // constanta de tip integer egala cu nr. de elemente ale vectorului 'var'
int main () {
int i, *ptr;
ptr = &var[MAX-1];
ptr--;
return 0;
int main () {
int i, *ptr;
ptr = &var;
i = 0;
ptr++;
i++;
return 0;
int main () {
int i;
return 0;
//urmatoarea declaratie este a unui vector de pointeri de tip 'int', fiecare element tinand un pointer
a unei valori intregi
int *ptr[MAX];
//prin urmare urmatorul cod asociaza si apoi printeaza toti pointerii referitori la vectorul 'var'
#include <stdio.h>
int main () {
return 0;
int main () {
// tipul este 'char' dar apare ca un vector cu 4 elemente de tip 'char', adresarea se face prin pointerul
'names'?
char *names[] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali"
};
int i = 0;
return 0;
declaratie: **var
#include <stdio.h>
int main () {
int var;
int *ptr;
int **pptr;
var = 3000;
/* 'ptr' ia adresa lui 'var' */
ptr = &var;
pptr = &ptr;
return 0;
#include <time.h>
int main () {
getSeconds( &sec );//de ce folosesc & ? poate pentru a lua valoarea numerica ?
return 0;
return;
}
#include <stdio.h>
/* function declaration */
int main () {
double avg;
return 0;
int i, sum = 0;
double avg;
sum += arr[i];
return avg;
Nu este indicat de a returna o adresa a unei variabile locale (definita in corpul functiei),deci, vom
declara variabila
Urmatorul exemplu: o functie care genereaza 10 valori aleatoare si le returneaza printr-un vector ce
repr. de fapt un pointer
#include <stdio.h>
#include <time.h>
int * getRandom( ) {
int i;
r[i] = rand();
printf("%d\n", r[i] );
return r;
int main () {
/* a pointer to an int */
int *p;
int i;
p = getRandom();
return 0;
#####################################################
{int i;
for(i=0;i<nr;i++)
for (i=0;i<nr;i++)
//return 0;
}
void citire_vector(int nr, int el[])
{int i;
for (i=0;i<nr;i++)
//return 0;
int main(void)
definire_vector(n,a);
//citire_vector(n,a);
//definire_vector(m,b);
//citire_vector(m,&b);
return 0;