Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Prosledjivanje po vrednosti, i josh neka pocetnicka pitanja ...

  • 8 odgovora
  • 8.957 pregleda

Najnovija ↓

Prosledjivanje po vrednosti, i josh neka pocetnicka pitanja ... 16.03.2006. u 23:20 · pre 251 mesec #1
ako imam sledeci deo koda :

void funk(vectr<int> t){ ... }

void main(){
vector<int> tmp;
...
funk(tmp);
...
}


Da li ce se ceo vektor prenositi kao argument (znachi po vrednosti), ili samo referenca na njega?
Potpis
mmmmmm.. aahhhhhh..
e, nije sex nego serem!
Re: Prosledjivanje po vrednosti, i josh neka pocetnicka pitanja ... 16.03.2006. u 23:35 · pre 251 mesec #2
Mislim da ce ovo napraviti kopiju celog vektora (ukljucujuci sve vrednosti u njemu) u f-ji funk.

Ako hoces prenos po referenci:
void funk(vector<int>&t){ ... }

A ako zelis da se osiguras da elementi nece biti menjani:
void funk(const vector<int>&t){ ... }
Potpis
Ipak se ++uje.
Re: Prosledjivanje po vrednosti, i josh neka pocetnicka pitanja ... 03.04.2006. u 10:39 · pre 250 meseci #4
Evo pogledaj ovaj primer
Code:

// Dev-Cpp 4.9.9.2 with Mingw/GCC 3.4.2
#include <stdio.h>
#include <string.h>

/* swap(int *a, int *b) : prosledjene adrese argumenata 
   doci ce do promene vrednosti (i,j) van funkcije */
void swap(int *a, int *b){
    int c = *a;
    *a = *b;
    *b = c;
};

/* swap(int a, int b) :  prave se lokalne kopije argumeta,
   pa vrednosti (i,j) van funkcije ostaju nepromenjeni */
void nije_swap(int a, int b){
    int c = a;
    a = b;
    b = c;
};

int main (){
    int i = 2, j = 5;
    printf("Pre poziva: i = %d,  j = %d\n", i,j);
    swap(&i,&j);
    printf("\nPosle poziva swap(): i = %d,  j = %d\n", i,j);
    nije_swap(i,j);
    printf("\nPosle poziva nije_swap(): i = %d,  j = %d\n", i,j);
    system("pause");
    return 0;
}

idb
Re: Prosledjivanje po vrednosti, i josh neka pocetnicka pitanja ... 04.04.2006. u 14:59 · pre 250 meseci #6
Ne, nije to nikakava maska, nego u funkciju prosljedjujes gotovu vrijednost ili pointer.

Ako imas int a = 5 i pozoves funkciju kojoj je ulazni argument varijabla a, sve operacije koje ti radis sa tom varijablom a unutar funkcije su vidljive samo unutar scopea te funkcije, zato sta pri pozivu se kopira vrijednost varijable iz maina, pa se radi samo sa tom vrijednosti. Nakon izlaza iz funkcije, varijabla a je netaknuta u mainu, makar ti radio cuda s njom.

Ako prosljedis pointer u funkciju, baratas sa memorijskom adresom na koju taj pointer pokazuje. Tako ako prosljedis pointer koji gleda na memorijsku adresu varijable a iz maina, ti radis sa memorijskim mjestom na kojem stoji varijabla a, tako da svaka promjena koju napravis u funkciji je vidljiva i u drugim scopeovima.

Simple as that...
Potpis

Q: HSP56 Micromodem nece da radi kompjuter ga prepozna a kad treba da se konektujem nece ne daje ni znaka zivota. u cemu je problem.

A: Crko mozda od grmljavine mozda od spanaca. Uglavnom baci ga u WC solju jako povuci vodu. Skupi 5e i uzmi drugi i ne postuj temu na pogresno mesto.
Re: Prosledjivanje po vrednosti, i josh neka pocetnicka pitanja ... 29.04.2006. u 04:52 · pre 249 meseci
izmenjeno 1 put, poslednji put n1tr0 29.04.2006. u 04:57
  1. n1tr029.04.2006. u 04:57zapis iz teksta poruke
#9
Citat:
z@re:
Ne, nije to nikakava maska, nego u funkciju prosljedjujes gotovu vrijednost ili pointer.


1) Kada se f-ja poziva ne prosledjuje se pointer vec adresa promenljive.
2) Ne prosledjuje se f-ji, vec na stek, a f-ja to preuzme sa steka i smesti u odgovarajucu promenljivu(u ovom slucaju pokazivac).

Verovatno si mislio na ovo: u f-ju se parametri prenose po vrednosti(od kojih se prave kopije na steku i kada ih menjamo u f-ji to ne utice na one originalne promenljive) ili po referenci(na stek se prosledjuju adrese promenljivih i zbog toga kada ih preko pokazivaca obradjujemo ustvari radimo sa originalima, i svaka promena parametara unutar f-je izaziva promenu originala).
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme