Recién comencé a estudiar C, y cuando hice un ejemplo sobre pasar puntero a puntero como parámetro de una función, encontré un problema.
Este es mi código de muestra:
#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;
}
El problema ocurre en la línea 16, cuando modifico *ptr+=1a *ptr++. El resultado esperado debería ser toda la matriz y el número 1, pero cuando uso*ptr++ el resultado es 0.
¿Hay alguna diferencia entre +=1y ++? Pensé que los dos son lo mismo.
allocateIntArrayes un mal nombre, ya que parece ser mallocla matriz de la función, pero no lo hace. Sugiero en su fillIntArraylugar. 2) No utiliza el valor de retorno de allocateIntArray. Le sugiero que cambie el tipo de retorno a void. 3) No debe if (ptr != NULL)en función de increasePointerser if (*ptr != NULL)? 4) El reparto malloces innecesario. Ver el comentario de Sourav arriba. 5) Esto: for (int i = 0; i < 10; i++){ printf("%d\n", p1[i]); }y printf("%d\n", *p1); p1--;debe incluirse if(p1 != NULL). 6) string.hno se usa.
p+=1es como ++p, no comop++
string.