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+=1
en *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 +=1
et ++
? Je pensais que les deux étaient identiques.
allocateIntArray
est un mauvais nom car il semble que vous soyez malloc
le tableau de la fonction, mais vous ne le faites pas. Je suggère à la fillIntArray
place. 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 malloc
est 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.h
est inutilisé.
p+=1
est comme ++p
, pas commep++
string
.