C - 'char **' unterscheidet sich in den Ebenen der Indirektion von 'char (*) [6]'

8

Kann mir bitte jemand erklären, was mit dem folgenden und vor allem warum nicht stimmt?

%Vor%

BEARBEITEN

Mein Beispiel oben basierte auf einer Funktion wie dieser, die abstürzte:

%Vor%

Wie mich Vaughn Cato darauf hingewiesen hat, obwohl *pp[0] = 'a'; nicht abstürzt, ist es in schlechter Verfassung. Die korrekte Form ist die Klammer

%Vor%

Auch als weiteres Poster wies MK darauf hin, dass die FAQ den Unterschied zwischen Arrays und Zeigern beschreibt: Ссылка

    
loop 23.09.2011, 03:57
quelle

3 Antworten

9

test = &array

ist falsch, weil test vom Typ char** ist und &array ist ein char(*)[6] und ist ein anderer Typ als char**

Ein Array ist nicht vom selben Typ wie char* , obwohl C implizit zwischen einem Array-Typ und einem char* in einigen Kontexten konvertiert wird, aber dies ist keiner von ihnen. Grundsätzlich ist die Erwartung, dass char* gleich dem Typ eines Arrays ist (zB: char[6] ), falsch und daher ist die Erwartung, dass die Adresse eines Arrays zu einem char** führt, ebenfalls falsch.

    
sashang 23.09.2011, 04:05
quelle
3

Dies wäre der Weg, um das zu tun, was Sie zu tun scheinen:

%Vor%

test ist ein Zeiger auf ein Array, und ein Array unterscheidet sich von einem Zeiger, obwohl C es in meinen Fällen leicht macht, einen wie den anderen zu verwenden.

Wenn Sie vermeiden möchten, ein Array bestimmter Größe anzugeben, können Sie einen anderen Ansatz verwenden:

%Vor%     
Vaughn Cato 23.09.2011 04:13
quelle
1

char **test; ist ein Zeiger auf einen Zeiger, aber wenn Sie die Adresse eines ganzen Arrays nehmen wollen, muss es ein Zeiger auf das gesamte Array sein, d. h. char (*test)[6];

    
cpx 23.09.2011 04:03
quelle

Tags und Links