Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pointeri/Pokazivaci (kako rijesiti?)

[es] :: C/C++ programiranje :: C/C++ za početnike :: Pointeri/Pokazivaci (kako rijesiti?)

[ Pregleda: 2388 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

SuperC

Član broj: 120719
Poruke: 124
*.9.14.vie.surfer.at.



Profil

icon Pointeri/Pokazivaci (kako rijesiti?)11.01.2007. u 21:17 - pre 210 meseci
Posto tek ucim pokazivace, pokusavam da rijesim nekoliko zadataka, znaci ovo su pitanja sa testa, koja su vec bila. Aendern (njem.) znaci promijeni

Sta je ovdje rjesenje?


Citat:
#include <iostream>
using namespace std;
void aendern(int &u)
{
u = 30;
}
main() {

int a[] = {2,5,7,9};
cout << a[1] << endl;

int *p = a;
cout << *p << endl;

p = p + 1;
cout << *p << endl;
cout << *(p+1) << endl;

int* x = a;
aendern(*(x+2));
aendern(x[2]);
aendern(*(&a + 2));
cout << a[2] << endl;
}





Da li rjesenje ide ovako:
prvo ide 5 kao prvo cifra, zatim 2, jer *p ide na a, pa se poveca za jedan, znaci 5, pa opet za jedan se poveca, znaci 7

5257

i sta uraditi sa aendern (promijeni) ?

Ako imam pokazivac x na a..?
 
Odgovor na temu

SuPeR_MaSteR
Marko Stamenković

Član broj: 88590
Poruke: 115
*.inffo.net.



Profil

icon Re: Pointeri/Pokazivaci (kako rijesiti?)11.01.2007. u 22:16 - pre 210 meseci
Ne znam sta je ovde nejasno.
Code:
int* x = a;

Deklarise se pointer x na tip int i inicijalizuje na adresu prvog elementa niza a.
Ekvivalentno tome je: int x = a[0];
Code:
aendern(*(x+2));

Funkciji aendern se salje element a[2], tj. sadrzaj pointera x + 2 (sto je <=> a[2])
Code:
aendern(x[2]);

Ovaj red bi trebao biti potpuno jasan, efekat je isti kao i u prethodnom.
Code:
aendern(*(&a + 2));

Opet je argument a[2] samo drugacije zapisano. a je sam po sebi pointer na prvi element niza a, znaci a <> a[0] (nepotrebno je koristiti operator &). Zatim se na a dodaje 2 sto je <=> a[0+2] => a[2]
Code:
cout << a[2] << endl;

Ispisuje se (nova) vrednost a[2] jer funkcija aendern stvara bocne efekte, tako da je vrednost a[2] = 30.

 
Odgovor na temu

SuperC

Član broj: 120719
Poruke: 124
*.9.14.vie.surfer.at.



Profil

icon Re: Pointeri/Pokazivaci (kako rijesiti?)11.01.2007. u 22:24 - pre 210 meseci
hvala puno na detaljnom pojasnjenju, no kako si dosao do 30?? Ovdje prvo imas 2 i tri puta 7 to bi bilo 23, koji su bocni efekti funkcije aendern da si dobio vrijednost od 30?


Sta sa gornjim dijelom? Znaci li to da je ukupno rjesenje 5257 i 30 odnosno 525730??
 
Odgovor na temu

SuPeR_MaSteR
Marko Stamenković

Član broj: 88590
Poruke: 115
*.inffo.net.



Profil

icon Re: Pointeri/Pokazivaci (kako rijesiti?)11.01.2007. u 22:57 - pre 210 meseci
Code:
void aendern(int &u)
{
   u = 30;
}

Koji god element niza a da prosledis kao argument ovoj funkciji, taj element postaje = 30.
Na izlazu se prikazuje:
Code:
5
2
5
7
30
 
Odgovor na temu

SuperC

Član broj: 120719
Poruke: 124
*.9.14.vie.surfer.at.



Profil

icon Re: Pointeri/Pokazivaci (kako rijesiti?)11.01.2007. u 23:08 - pre 210 meseci
aaa, do mene, koji previd. hvala puno.

Jos jedno pitanje:

Code:
#include<iostream>
using namespace std;

void f (int *a, int &b)
{
    cout << *(a + 2) << b + 2; 
    b += *a;
}

int main()
{
    int feld[] = {4,2,1};

    int *a;
    a = (feld);

    f(feld, *a);
    cout << *a;
    return 0;
}



ja ovdje dobijem 11 kao rjesenje?
 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
89.190.198.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: Pointeri/Pokazivaci (kako rijesiti?)11.01.2007. u 23:17 - pre 210 meseci
Code:
a = (feld);
Nakon ovoga, a pokazuje na prvog člana niza feld.

Code:
f(feld, *a);
Funkcija dobija pokazivač na feld i referencu na *a tj. prvi član feld.

Code:
b += *a;
(U funkciji) Ovde se referenci na prvi član feld dodaje vrednost njegovog prvog člana. Tj. on postaje 4+4 = 8.

Nakon ovoga feld je {8,2,1}.

U funkciji štampa prvo *(a + 2) što je treći član niza: 1 pa potom (pre izmene) b+2, što je prvi član plus dva: 6. Po povratku u main stampa prvi član feld nakon izmene tj. 8.

Izlaz: "168".
Ipak se ++uje.
 
Odgovor na temu

SuperC

Član broj: 120719
Poruke: 124
*.9.14.vie.surfer.at.



Profil

icon Re: Pointeri/Pokazivaci (kako rijesiti?)11.01.2007. u 23:36 - pre 210 meseci
znaci ovdje se moze promijeniti vrijednost u polju. hvala puno.
 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
89.190.198.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: Pointeri/Pokazivaci (kako rijesiti?)12.01.2007. u 02:32 - pre 210 meseci
U principu ovde su pokazana dva načina pristupa elementima polja: preko pokazivača (Zeiger) i preko reference (Referenz). Evo školskog primera kako ovo radi.
Ipak se ++uje.
Prikačeni fajlovi
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Pointeri/Pokazivaci (kako rijesiti?)

[ Pregleda: 2388 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.