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
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
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Engleza,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă