Maison >développement back-end >C++ >Comment les pointeurs sont-ils transmis comme arguments en C , par valeur ou par référence ?
Passer des arguments de pointeur : passer par valeur ou passer par référence en C
En C, les arguments sont généralement transmis par valeur, y compris les pointeurs. Lorsqu'un pointeur est passé en argument, l'adresse de l'objet vers lequel il pointe est copiée dans le paramètre de la fonction. Cela signifie que toute modification apportée au pointeur lui-même dans la fonction ne sera pas reflétée en dehors de la fonction.
Cependant, les modifications apportées à l'objet pointé par le pointeur seront reflétées, car l'objet d'origine est modifié via la référence du pointeur. Par conséquent, il est acceptable et constitue une procédure standard d'utiliser un pointeur vers un pointeur comme argument d'une fonction pour modifier la valeur du pointeur dans cette fonction.
Par exemple, considérons le code suivant :
void ModifyPointer(int **ptr) { *ptr = new int; } int main() { int *ptr = new int; ModifyPointer(&ptr); return 0; }
Dans ce code, la fonction ModifyPointer prend un pointeur vers un pointeur comme argument. Au sein de la fonction, un nouvel objet int est alloué et le pointeur référencé par le paramètre est mis à jour pour pointer vers le nouvel objet.
Puisque le pointeur d'origine est modifié via le pointeur vers pointeur, le changement se reflète dans le fonction principale. La variable ptr pointe désormais vers l'objet int nouvellement alloué.
En C , il est préférable d'utiliser des références au lieu de pointeurs autant que possible. Les références offrent des fonctionnalités similaires aux pointeurs mais avec une syntaxe plus propre et une vérification de type plus forte.
Par exemple, l'exemple ci-dessus peut être réécrit à l'aide d'une référence :
void ModifyPointer(int *&ptr) { ptr = new int; } int main() { int *ptr = new int; ModifyPointer(ptr); return 0; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!