Je viens de commencer à étudier C, et en faisant un exemple de passage d'un pointeur à un pointeur en tant que paramètre d'une fonction, j'ai trouvé un problème.
Voici mon exemple de code:
#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;
}
Le problème se produit à la ligne 16, lorsque je modifie *ptr+=1en *ptr++. Le résultat attendu doit être le tableau entier et le numéro 1, mais lorsque j'utilise *ptr++le résultat est 0.
Y a-t-il une différence entre +=1et ++? Je pensais que les deux étaient identiques.
allocateIntArrayest un mauvais nom car il semble que vous soyez mallocle tableau de la fonction, mais vous ne le faites pas. Je suggère à la fillIntArrayplace. 2) Vous n'utilisez pas la valeur de retour de allocateIntArray. Je vous suggère de changer le type de retour en void. 3) La if (ptr != NULL)fonction ne devrait-elle pas l' increasePointerêtre if (*ptr != NULL)? 4) Le casting mallocest inutile. Voir le commentaire de Sourav ci-dessus. 5) Ceci: for (int i = 0; i < 10; i++){ printf("%d\n", p1[i]); }et printf("%d\n", *p1); p1--;doit être inclus dans if(p1 != NULL). 6) string.hest inutilisé.
p+=1est comme ++p, pas commep++
string.