Ich frage mich, ob jemand mir mit dem folgenden C-Programm helfen kann, das ich mache. Der Code erstellt einfach einen Zeiger, dem dann die Adresse eines Integer-Arrays zugewiesen wird. Von dort erhält der Zeiger einen Wert und wird dann inkrementiert. Die Ausgabe zeigt den Array-Namen, die Array-Adresse und den Array-Wert an. Die Ausgabe funktioniert wie erwartet, außer dass das letzte Element im Array um 5 anstatt um eins erhöht wurde.C Programm mit Pointer Inkrementieren Falsche Werte
ist der Code unten gezeigt:
#include <stdio.h>
main()
{
int numar[4]; //integer array
int x; //value for loop
int *p; //pointer
p=numar; //'point' p to address of numar array (no & necessary as arrays are pointers)
for(x=0;x<5;x++) //loop 0-4
{
*p=x; //assign the value of the first item in array to x
p++; //increment pointer for next iteration
}
for(x=0;x<5;x++) //loop 0-4
{
//display output of array name, array location and array value
printf("array[%d] is at address %p with value %d\n", x,&numar[x],numar[x]);
}
return 0;
}
Die Ausgabe des obigen Codes ist unten gezeigt:
array[0] is at address 0061FF18 with value 0
array[1] is at address 0061FF1C with value 1
array[2] is at address 0061FF20 with value 2
array[3] is at address 0061FF24 with value 3
array[4] is at address 0061FF28 with value 8
Da der gewünschte Wert für Array sehen kann [4] 4, sein sollte, , aber es ist stattdessen 8.
Jede Hilfe würde sehr geschätzt werden.
Vielen Dank,
'int numar [4]; 'sieht aber so aus, als ob Sie auf Index 4 zugreifen (max. gültig ist 3), deshalb laufen Sie vom Ende des Arrays ab und rufen undefiniertes Verhalten auf. Hier kommen die Nasen-Dämonen .... – John3136
'[4]' bedeutet, dass das Array 4 Elemente hat –
Arrays sind *** nicht *** Zeiger. Ein (Unter-) Ausdruck, der zu einem Array ausgewertet wird, "verfällt" in einen Zeiger auf das erste Element dieses Arrays (und so funktioniert Ihre Zuweisung), aber das ist eine ganz andere Sache. –