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

Ce afiseaza urmatoarea secventa:
int *a, n=10;
a = new int[n];
for(int v=1, *p=a; v<40 ; v *= 3,p++){ *p=v; }
for(int i=0;i<5;i++){cout << a[i] << " "; }
delete []a;
Ați putea va rog să îmi și argumentați rezultatul? Ce fac mai exact anumite secvențe pas cu pas? Mulțumesc!

Răspunsuri la întrebare

Răspuns de Utilizator anonim
1
 new int [n] aloca spatiul necesar stocarii a n date de tipul int 

 a=new int[n]   pointerul "a" retine  adresa din memorie a spatiului alocat

in primul for , pointerul p indica locul din vector unde va fi retinuta valoarea lui v ( incepe de la a ( locul unde incepe spatiul alocat ) si merge din 1 in 1 )
 asa ca valorile lui v vor fi retinute pe pozitii consecutive 

   v merge de la 1 la 40 cu pasul  v*3 adica ia valorile 1 3 9 27 

al 2-lea for afiseaza elementele vectorului spre care arata pointerul a adica
 
1 3 9 27 si un 0 deoarece a 5-a pozitie alocata este libera .

delete[]a  sterge blocul de memorie alocat stocarii

Practic afiseaza 1 3 9 27 0 

Daca e vre-o anumita secventa pe care nu o intelegi poti sa intrebi .
Sper ca se intelege 

McKenzy: Multumesc frumos de explicatie! In al doilea for, daca as fi avut de la i=0 la i<6, ar fi afisat 1 3 9 27 0 0? Pentru fiecare pozitie neocupata se mai adauga un zero?
Utilizator anonim: Exact
Utilizator anonim: Sau daca in primul for aveai pana la 82 si in al 2-lea pana la 5 afisa 1 3 9 27 81
Utilizator anonim: Si tot asa
McKenzy: Am inteles, multumesc frumos!
Alte întrebări interesante