Ho appena iniziato a studiare C e, facendo un esempio sul passaggio del puntatore al puntatore come parametro di una funzione, ho riscontrato un problema.
Questo è il mio codice di esempio:
#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;
}
Il problema si verifica nella riga 16, quando modifico *ptr+=1in *ptr++. Il risultato atteso dovrebbe essere l'intero array e il numero 1 ma quando uso *ptr++il risultato è 0.
C'è qualche differenza tra +=1e ++? Ho pensato che entrambi fossero la stessa cosa.
allocateIntArrayè un brutto nome in quanto sembra che tu sia mallocl'array dalla funzione, ma non lo fai. Suggerisco fillIntArrayinvece. 2) Non utilizzi il valore restituito di allocateIntArray. Ti suggerisco di cambiare il tipo di reso in void. 3) Non dovrebbe if (ptr != NULL)in funzione di increasePointeressere if (*ptr != NULL)? 4) Il cast non mallocè necessario. Vedi il commento di Sourav sopra. 5) Questo: for (int i = 0; i < 10; i++){ printf("%d\n", p1[i]); }e printf("%d\n", *p1); p1--;deve essere racchiuso in if(p1 != NULL). 6) string.hè inutilizzato.
p+=1è come ++p, non comep++
string.