Informatică, întrebare adresată de Marianm693, 8 ani în urmă

Ce afiseaza urmatorul program, si as dori cu explicatii daca , fiecare linie ce face.
Multumesc

int tab[][3]={
{1,2,3},
{6,5,4},
{7,8,9}
};

void test(void *p){
int (*t)[2] = p;
t += 2;
printf("%d", *(*(--t)+2));
}
void main(){test(tab[1]);}

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
1

In apelul "test(tab[1]);", parametrul p este adresa primului element de pe a doua linie a matricii (tab + 3), corespunzator elementului 6.

Linia aceasta: int (*t)[2] = p; declara un pointer la vectorul tab[1] (adresa p sau tab+3).

Linia "t += 2;" muta pointerul cu doua pozitii la dreapta; acum este p + 2 sau tab + 5, elementul respectiv este 4.

Expresia "*(*(--t)+2)" e un pic mai complicata

In primul rand, decrementeaza t, care acum este p + 1 sau tab + 4.

Dupa, ia valoarea de la adresa de memorie t (valoarea este 5), adauga 2 la ea(rezultand 7) si ia valoarea de la aceasta adresa din memorie(*(7)), si o afiseaza (7 este adresa tab + 7 care are valoarea 8).

Astfel programul afiseaza valoarea 8


Marianm693: Mersi mult
Alte întrebări interesante