Ich habe einen Code, den ich mit der folgenden Variablendeklaration behalte:
%Vor%Es wird mit dieser Funktion verwendet:
%Vor%Der Funktionsaufruf lautet:
%Vor%Ich bin mir verdammt sicher, dass es genau dasselbe ist wie:
%Vor%Ich habe sogar überprüft, dass der char * -Zeiger in SomeFunction in beiden Fällen auf den gleichen Speicherort wie das Array zeigt.
Meine Frage ist eine Plausibilitätsprüfung, ob die beiden Funktionsaufrufe identisch sind (und deshalb der ursprüngliche Programmierer nur böse war)?
sie sind genau gleich.
%Vor%bedeutet genau
%Vor%wobei someArray im zweiten Fall ein Zeiger auf den Speicherort ist. Ähnlich,
%Vor%bedeutet genau
%Vor%In beiden Fällen sind die Begriffe Zeiger auf Speicherorte.
Der C-Programmier-FAQ Abschnitt auf Arrays und Zeiger behandelt dies (und viele andere häufige C-Fragen und Verwirrungen.
Wie alle anderen sagten, sind die beiden Notationen gleichwertig.
Ich würde normalerweise den einfacheren verwenden, außer es gibt mehrere Aufrufe wie folgt:
%Vor% Wobei idealerweise alle Konstanten (magische Zahlen) enum (oder #define
) Konstanten wären.
Beide sind ein und dasselbe, obwohl das zweite gut aussieht und die Absicht verdeutlicht, das Array an die Funktion zu übergeben. Aber wie weiß die SomeFunction die Größe des Arrays, das übergeben wird, wird es immer als 40 angenommen? Ich denke, es ist besser, die Größe auch als Parameter an SomeFunction zu übergeben.
Diese beiden Varianten sind äquivalent und gehen wie folgt
%Vor%sieht sauberer aus.
Die Deklaration
int a [10]; int * pa;
Es gibt einen Unterschied zwischen einem Array und einem Zeiger, der beachtet werden muss. Ein Zeiger ist eine Variable, also sind pa = a und pa ++ zulässig. Aber ein Array-Name ist keine Variable; Konstruktion wie a = pa und a ++ sind illegal
Als Formatparameter in einer Funktionsdefinition, Saibling [] und Zeichen * s sind gleichwertig;
Von: Die C-Programmiersprache 2. , Seite 99-100