Ich habe gerade angefangen, C zu studieren, und als ich ein Beispiel für die Übergabe eines Zeigers an einen Zeiger als Funktionsparameter machte, fand ich ein Problem.
Dies ist mein Beispielcode:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int* allocateIntArray(int* ptr, int size){
if (ptr != NULL){
for (int i = 0; i < size; i++){
ptr[i] = i;
}
}
return ptr;
}
void increasePointer(int** ptr){
if (ptr != NULL){
*ptr += 1; /* <----------------------------- This is line 16 */
}
}
int main()
{
int* p1 = (int*)malloc(sizeof(int)* 10);
allocateIntArray(p1, 10);
for (int i = 0; i < 10; i++){
printf("%d\n", p1[i]);
}
increasePointer(&p1);
printf("%d\n", *p1);
p1--;
free(p1);
fgets(string, sizeof(string), stdin);
return 0;
}
Das Problem tritt in Zeile 16, wenn ich ändern *ptr+=1
zu *ptr++
. Das erwartete Ergebnis sollte das gesamte Array und die Nummer 1 sein, aber wenn ich *ptr++
das Ergebnis verwende, ist es 0.
Gibt es einen Unterschied zwischen +=1
und ++
? Ich dachte, dass beide gleich sind.
allocateIntArray
ist ein schlechter Name, da es scheint, dass Sie malloc
das Array von der Funktion, aber Sie nicht. Ich schlage fillIntArray
stattdessen vor. 2) Sie verwenden nicht den Rückgabewert von allocateIntArray
. Ich schlage vor, Sie ändern den Rückgabetyp in void
. 3) Sollte nicht if (ptr != NULL)
in Funktion increasePointer
sein if (*ptr != NULL)
? 4) Das malloc
Eingießen ist nicht erforderlich. Siehe Souravs Kommentar oben. 5) Dies: for (int i = 0; i < 10; i++){ printf("%d\n", p1[i]); }
und printf("%d\n", *p1); p1--;
muss beigefügt werden if(p1 != NULL)
. 6) string.h
wird nicht verwendet.
p+=1
ist wie ++p
, nicht wiep++
string
.