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+=1zu *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 +=1und ++? Ich dachte, dass beide gleich sind.
allocateIntArrayist ein schlechter Name, da es scheint, dass Sie mallocdas Array von der Funktion, aber Sie nicht. Ich schlage fillIntArraystattdessen 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 increasePointersein if (*ptr != NULL)? 4) Das mallocEingieß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.hwird nicht verwendet.
p+=1ist wie ++p, nicht wiep++
string.