2016-03-20 5 views
1

Ich weiß, dass Arrays durch Verweis in einem Funktionsaufruf übergeben werden, aber was passiert, wenn Sie nur ein Array-Element, z. func(ar[0]). Wird arg[0] als Wert oder als Referenz übergeben?Werden Array-Elemente auch nach Wert oder Verweis übergeben?

+1

hängt davon ab, ob es ein Array ist oder nicht. Ein größeres Codebeispiel würde helfen –

+7

Arrays werden nicht als Referenz übergeben. Ein Array-Ausdruck zerfällt jedoch in einen Zeiger auf sein erstes Element, der üblicherweise an Funktionen übergeben wird. Alles in C wird nach Wert übergeben. –

+0

@KerrekSB Arrays werden durch Verweis in C. [Siehe hier] (https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_reference) zur Definition von "pass by reference" übergeben. Ein Zeiger entspricht der Definition von [Verweis] (https://en.wikipedia.org/wiki/Reference_ (computer_science)). –

Antwort

2

Arrays sind nicht durch Bezug sie Zerfall als Zeiger, wenn sie als Funktionsargument oder in einem Ausdruck verwendet bestanden, mit der Ausnahme als Operand zum sizeof Operator. Daher empfängt eine Funktion einen Zeiger auf das erste Element des Arrays, unabhängig davon, wie das Argument im Funktionsprototyp definiert ist, als Zeiger oder als Array.

Wenn Sie ein Array-Element übergeben, wird es als Wert übergeben, es sei denn, dieses Array-Element ist ein Array selbst. In diesem Fall wird ein Zeiger auf das erste Element übergeben.

+0

@ AndrésRivero: können Sie bitte auf das graue Häkchen unter der Antwort klicken, um es als akzeptiert zu markieren? – chqrlie

0

Welcher Array-Typ auch immer verwendet wird, wird anstelle eines Zeigers an dieses Element übergeben.

int a[2]; 
a[0] =5; 
a[1] =6; 

func1(a[0]); // passes int to func1 
func2(&a[1]); // passes pointer to int 

func1(int z)... 
func2(int * z)... 
Verwandte Themen