Molim objašnjenje primjera iz Demistificiranog c++

poruka: 3
|
čitano: 2.880
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
neaktivan
offline
Molim objašnjenje primjera iz Demistificiranog c++

Trebam pomoć s jednim primjerom iz knjige "Demistificirani C++" vezano uz korištenje polja kao argumenata.

Primjer ide ovako:

 

#include<iostream>
#include<iomanip>
using namespace std;

void ispisiMatricu(float **m, int redaka, int stupaca) {
    for (int r = 0; r < redaka; r++) {
        for (int s = 0; s < stupaca; s++)
            cout << setw(10) << ((float*)m)[r*stupaca+s];
        cout << endl;
    }
}

int main() {
    int redaka = 2;
    const int stupaca = 3;

    float (*matrica)[stupaca] = new float[redaka][stupaca];
    matrica[0][0] = 1.1;
    matrica[0][1] = 1.2;
    matrica[0][2] = 1.3;
    matrica[1][0] = 2.1;
    matrica[1][1] = 2.2;
    matrica[1][2] = 2.3;
    ispisiMatricu((float**)matrica, redaka, stupaca);
    return 0;
}

 

Ono što me zanima je zašto je u deklaraciji funkcije matrica, odnosno pokazivač na matricu naveden bez zagrada => "float **m, int redaka...", a kod poziva funkcije iz glavnog dijela oznake dereferenciranja se nalaze u zagradi zajedno sa tipom => "(float**)matrica, redaka..."

Sve ima svoje granice. Samo je glupost bezgranična.
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: Molim objašnjenje primjera iz Demistificiranog

Sorry, sada vidim da sam krivo shvatila pitanje. To se zove "kastanje" ( casting) tipova, i na taj način govoriš kompajleru na koji način će tretirati varijablu. Dakle, u ovom slučaju, kada napišeš (float **) ispred neke varijable kažeš da želiš da se ta varijabla tretira kao float ** tip.

Poruka je uređivana zadnji put sri 27.5.2009 1:01 (manic).
15 godina
neaktivan
offline
RE: Molim objašnjenje primjera iz Demistificiranog

U deklaraciji funkcije je navedeno da ima dva argumenta tipa int i jedan argument float pokazivac na pokazivac.
Funkcija je void -ništa ne vraća.

I zato pri pozivu funkcije moraš poštivati deklaraciju i zato ide castanje matrice u tip pokazivac na pokazivac tipa float.

Kako je i rečeno kastanje se uvijek (skoro) izvodi npr (int) neka_varijabla_drugog_tipa  recimo kad su u pitanju brojevi.

Samo poštivaš argumente iz deklaracije.

 

 

float** varijabla ;

to je deklaracija varijable koja je tipa pokazivač na pokazivač na tip  float ,dva dereferenciranja do tražene adrese i vrijednosti na toj adresi.

Možda sam i krivo shvatio ali radi se i o samoj sintaksi pisanja da bi kompajler znao da se radi o pokazivacu na pokazivac čisto radi aritmetike i poštivanja tipa.

 

 

 

 

Private
Poruka je uređivana zadnji put sri 27.5.2009 1:39 (Private).
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice