Seite 1 von 1

bedeutung void **_a als parameter

Verfasst: 8. Juli 2011 13:08
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!

Verfasst: 8. Juli 2011 13:56
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 ...

Verfasst: 8. Juli 2011 14:56
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.

Verfasst: 8. Juli 2011 15:30
von Aenni
dankeschön für die Erklärungen!