Übergeben von C-Array als char * -Funktionsparameter

7

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)?

    
sipwiz 08.04.2009, 04:35
quelle

8 Antworten

12

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.

    
Willi Ballenthin 08.04.2009, 04:47
quelle
12

Die beiden sind gleichwertig und ich denke SomeFunction (tmpry); ist lesbarer.

    
ojblass 08.04.2009 04:37
quelle
7

Es kann signifikant sein, wenn SomeFunction ein Makro ist und "sizeof" eines seiner Argumente annimmt, weil sizeof(tmpry) nicht unbedingt gleich sizeof(&tmpry[0]) sein muss.

Anderenfalls, wie andere darauf hingewiesen haben, sind sie genau gleich.

    
Alex B 08.04.2009 05:00
quelle
5

Der C-Programmier-FAQ Abschnitt auf Arrays und Zeiger behandelt dies (und viele andere häufige C-Fragen und Verwirrungen.

    
mctylr 09.04.2009 00:16
quelle
3

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.

    
Jonathan Leffler 08.04.2009 05:09
quelle
1

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.

    
Naveen 08.04.2009 04:40
quelle
1

Diese beiden Varianten sind äquivalent und gehen wie folgt

%Vor%

sieht sauberer aus.

    
sharptooth 08.04.2009 04:41
quelle
1

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

    
Jiang Bian 08.04.2009 14:55
quelle

Tags und Links