bedeutung void **_a als parameter

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Aenni
Beiträge: 79
Registriert: 15. Juli 2010 22:29

bedeutung void **_a als parameter

Beitrag von Aenni »

Hallo zusammen,

ich hab mal eine grundlagen Frage:

functionsdefinition :

Code: Alles auswählen

int Widget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QWidget::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: startIt(); break;
        case 1: stopIt(); break;
        default: ;
        }
        _id -= 2;
    }
    return _id;
}
(auszug aus einem moc file von qt)

Meine Frage bezieht sich auf die doppelten "**".
Was genau bedeuten diese ?
Das ein Stern ein Pointer ist mir klar, jedoch ist mir die doppelte schreibweise unbekannt?

Herzlichen Dank im Voraus!
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

pointer auf pointer

also die Addresse einer Variable die auf irgend was zeigt.

Verwendet man wenn man einen zeiger zurueckgeben muss, ohne ruckgabeparameter zu verwenden (weil reserviert fuer fehlercode z.b.)

int ix = 5;
int * pInt = &ix; /// Zeiger auf eine int variable ...
int ** ppInt = &pInt; /// Zeiger auf Zeiger auf Int

In C++ eher designtechnisch veraltet ... in C ist es aber sehr gebrauechlich.

Ciao ...
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag von FaS »

RHBaum hat geschrieben:Verwendet man wenn man einen zeiger zurueckgeben muss, ohne ruckgabeparameter zu verwenden (weil reserviert fuer fehlercode z.b.)
In C++ benutzt man dafür aber Referenzen (nichts weiter als limitierte Zeiger, wodurch der Compiler besser optimieren und mehr semantische Fehler erkennen kann).

void** kann auch ein Array auf void-Pointer sein, sowas ähnliches findet man z.B. hier wieder:

Code: Alles auswählen

int main( int argc, const char **argv )
{
}
In diesem Fall repräsentieren die Array-Elemente (die char-Pointer) wiederum jeweils ein Array auf char-Elemente.
char **argv als Funktionsparameter (und nur dann), ist übrigens äquivalent zu char *argv[], da Arrays nicht by value übergeben werden können.
Aenni
Beiträge: 79
Registriert: 15. Juli 2010 22:29

Beitrag von Aenni »

dankeschön für die Erklärungen!
Antworten