Array innerhalb einer Funktion in C modifizieren

8
%Vor%

-

%Vor%

Ich versuche, Zeiger zu verstehen, wenn ein Array beteiligt ist. Während ich den obigen Code getestet habe, ist mir aufgefallen, dass durch das Setzen eines anderen Indexwerts wie hi ( &a[0], fp ) bis hi ( &a[1], fp ) unterschiedliche Ergebnisse erzielt werden.

//result of [ hi ( &a[0], fp ) ] //result of [ hi ( &a[1], fp ) ] 50,13,124 junk#,50,13 .

Ich bin wirklich verwirrt über die Ergebnisse, weil ich in der Funktion 'hi' den Start des Arrays von i = 0 aus festlege, was bedeutet, dass der Wert von a[0] gespeichert wird. Aber es scheint, als würde 1 anstelle von 0 irgendwie Werte beiseite schieben. Warum passiert das?

    
ChewChew 12.08.2017, 23:14
quelle

3 Antworten

6

Das könnte für Sie mehr Sinn machen, wenn Sie an & als einen Operator denken, der auf einen einzelnen Gegenstand reagiert, ähnlich wie - auf eine Zahl wirkt, um das Vorzeichen zu ändern. In diesem Fall verwendet & die Adresse von dem, was Sie ihm geben. Im Falle von &a[0] nehmen Sie die Adresse a[0] . Im Fall von &a[1] nehmen Sie die Adresse von a[1] . Mit anderen Worten, Sie nehmen die Adresse verschiedener Elemente des Arrays. In der Funktion enthält b also die Adresse, die Sie übergeben haben. Soweit die Funktion weiß, übergeben Sie das "erste" Element des Arrays. Es kennt nichts von den vorhergehenden Elementen.

    
Code-Apprentice 12.08.2017, 23:26
quelle
4

In Ihrem zweiten Beispiel haben Sie ein undefiniertes Verhalten. Sie übergeben die Adresse des zweiten Elements des Arrays. Dann scannen Sie alle 10 Elemente. Da Sie jedoch die Adresse des zweiten Elements als erste übergeben haben, schreibt der letzte scan das Element, das sich außerhalb des Arrays befindet - und es ist ein Fehler.

Ich würde vorschlagen, wenn Sie mehr als Element des Arrays manipulieren, übergeben Sie auch die Größe des Arrays

%Vor%

und der Anruf

%Vor%

oder

%Vor%     
PeterJ_01 12.08.2017 23:48
quelle
3

Sie geben keine andere Größe an, sondern stellen einen Zeiger auf das erste Element im Array und dann auf das zweite Element bereit.

Da Sie im zweiten Fall einen Zeiger auf das zweite Element gegeben haben und versucht haben, 10 Elemente zu lesen (beginnend bei der 2. Position), aber nur 9 gültige Elemente haben, wenn Sie bei der 2. anfangen, lesen Sie dies in den Speicher ist nicht im Array.

    
lostbard 12.08.2017 23:19
quelle

Tags und Links