Exemple de passage de paramètre de pointeur C / c ++

Je suis un étudiant en deuxième année. J'apprends la programmation depuis un an. Je voudrais partager la technologie avec vous sous la forme d'un blog. S'il y a quelque chose qui ne va pas avec moi, je souhaite que tout le monde me corrige.
Aujourd'hui, un de mes aînés m'a interrogé sur le changement de valeur de passage du pointeur. J'ai décidé de partager la question posée par mon frère aujourd'hui avec vous dans le code.

Arrêtez de dire des bêtises, passons au code.
1) Dans le premier cas, le paramètre de fonction est un pointeur, et la valeur est affectée de cette manière

test vide (int * arr) { int a = 3;

arr = &a;

}

int main (void) {

int value = 0;
int *arr = &value;

printf("函数调用前:*arr=%d\n",*arr);
//test(arr);
printf("函数调用后:*arr=%d\n",*arr);


system("pause");
return 0;
}
大家觉得这个value传入前后值是否会改变,答案当然是不会改变!
好让我们看看在vs2010上的执行情况

!Insérez la description de l'image ici

2) Ici, nous avons remarqué que le pointeur de paramètre dans la fonction test () est un nouveau pointeur créé dans la fonction temporaire. De cette façon, nous sommes équivalents à l'affectation du pointeur, c'est-à-dire le pointeur arr dans la fonction de test = le arr pointeur dans la fonction principale, Après l'affectation, l'opération d'affectation est effectuée dessus, en fait, l'opération d'affectation est déjà effectuée sur ce pointeur temporaire, et elle n'a rien à voir avec le pointeur de la fonction principale d'origine.
Donc, si nous voulons changer la valeur entrante en passant des paramètres, nous pouvons utiliser cette méthode.
Il suffit d'ajouter un caractère d'adresse, et le résultat sera très différent.

test vide (int * & arr) { int a = 3; arr = & a;

}

int main (void) {

int value = 0;
int *arr = &value;

printf("函数调用前:*arr=%d\n",*arr);
//test(arr);
printf("函数调用后:*arr=%d\n",*arr);
system("pause");
return 0;
}

Insérez la description de l'image ici

3) Nous avons vu que la valeur de arr a changé. Parce que le paramètre de la fonction test () n'est plus une copie de la fonction principale pour le moment. Les deux sont équivalents.
En fait, il existe une autre façon de jouer. Vous pouvez changer
la valeur de arr sans ajouter de références et vous pouvez également changer la valeur de la valeur
void test (int * arr) { int a = 3;

*arr = a;

}

int main (void) {

int value = 0;
int *arr = &value;

printf("函数调用前:*arr=%d\n",*arr);
printf("函数调用后:*value=%d\n\n",value);
test(arr);
printf("函数调用后:*arr=%d\n",*arr);

printf("函数调用后:*value=%d\n",value);

system("pause");
return 0;
}
我们看下在vs2010的执行情况

Insérez la description de l'image ici

Pourquoi cela se produit-il? L'arr de la sous-fonction ici est également une copie de la fonction principale, mais pourquoi il peut changer la valeur de arr et changer la valeur de value, c'est parce que dans la sous-fonction * arr = a ; Opérez en fait directement sur la valeur de la valeur!
C'est tout pour le partage de pointeurs d'aujourd'hui. Si vous avez des questions, vous pouvez communiquer avec moi.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45825875/article/details/108412033
conseillé
Classement