Scénarios d'utilisation des pointeurs et des références dans la série d'entretiens

Commencez par soulever deux questions:

  • Quelle est la différence entre le pointeur et la référence ?

  • Quand dois-je utiliser des pointeurs? Quand devriez-vous utiliser des références ?

01La différence entre le pointeur et la référence

 

Regardez d'abord un morceau de code:

int a = 1;
int b = 2;
int *c = nullptr;
c = &a;
int &d = b;

Un pointeur est en fait un entier qui stocke l'adresse mémoire. Cet entier représente l'adresse de la variable pointée.

Les références sont en fait des alias de variables, c'est-à-dire qu'un nouveau nom est donné à la variable. Notez que puisque la référence est un alias, elle doit avoir une ontologie . Une personne s'appelle Wang Erxiao. Nous pouvons également lui donner un alias appelé Erdan. Pour Erdan et Wang Erxiao sont en fait la même personne.

la différence:

  • Le pointeur peut être temporairement non initialisé lorsqu'il est déclaré, c'est-à-dire pointer = nullptr . Le pointeur peut être un pointeur nul à tout moment au cours de son cycle de vie, donc vérifiez à chaque fois qu'il est utilisé pour éviter l'apparition d'exceptions de pointeur nul, alors que les références n'ont pas besoin d'être faites Vérifiez, car la référence n'est jamais vide, elle doit avoir une ontologie, doit représenter un objet , et la référence doit être initialisée lors de sa création .

void FuncPtr(int *ptr) {
   
     if (ptr != nullptr) {
   
       cout << *ptr;  }}
void FuncReference(int &ref) {
   
       cout << ref;}
  • Le pointeur stocke l'adresse, le pointeur peut être réaffecté, il peut pointer vers un objet lors de l'initialisation, et il peut également pointer vers un autre objet à d'autres moments, et la référence est très spécifique, elle se terminera toujours, elle pointe toujours vers le représentant d'origine Cet objet . Pour donner un autre exemple, il y a une personne nommée Trump qui lui a donné un surnom appelé le président le plus stupide de l'histoire. Cette citation se terminera toujours. Autrement dit, peu importe quand, le président le plus stupide de l'histoire doit être Atout. Et le président des États-Unis peut être utilisé comme pointeur: une période peut être Obama, une période peut être Trump et une période peut être nulle.

 

02 Scénarios d'utilisation des pointeurs et des références

 

La principale fonction de référence est en tant que paramètre de fonction et valeur de retour. Regardez un morceau de code:

struct A {
   
       int a;};void func(const A &a) {
   
       cout << a.a;}
vector<int> vec(10);vec[3] = 3;

Pourquoi la valeur du conteneur vectoriel peut-elle être modifiée par vec [3] = 3, car l'opérateur [] renvoie une référence, ce qui équivaut à un alias pour la variable interne. Ici, vous pouvez également laisser l'opérateur [] renvoyer un pointeur, à savoir * vec [3] = 3, est-ce un peu moche et ne répond pas aux exigences grammaticales.
 

En fait, nous avons peut-être remarqué dans notre processus de programmation habituel que nous pouvons faire référence à tout ce qui peut être fait avec des pointeurs, mais pourquoi devrions-nous nous référer à cette chose?

répondre:

Utilisez le bon outil pour faire le bon travail. Le pointeur peut manipuler tout ce qui se trouve dans la mémoire sans restriction. Il est très puissant, mais aussi très dangereux. Vous pouvez donc utiliser des références au bon moment. Lorsque vous avez besoin de pointer vers quelque chose, il doit Soyez précis, ne le laissez jamais pointer vers autre chose. Par exemple, certains paramètres de fonction peuvent utiliser des références pour éviter la copie, ou implémenter un opérateur dont les exigences de syntaxe ne peuvent pas être satisfaites par des pointeurs. Par exemple, vec [3] = 3, vous pouvez utiliser des références, d'autres Utilisez toujours des pointeurs.

 

 

Il y a en fait beaucoup de points de connaissance après avoir cité c ++ 11. Pour plus de détails, veuillez consulter mon article précédent:

Références Lvalue, références rvalue, sémantique de déplacement, transfert parfait, tout ce que vous savez et ne savez pas se trouve ici

Référence

《C ++ plus efficace》

https://www.runoob.com/w3cnote/cpp-difference-between-pointers-and-references.html

https://blog.csdn.net/weikangc/article/details/49762929

https://www.jianshu.com/p/e548a978d737

https://zhuanlan.zhihu.com/p/63096392

Je suppose que tu aimes

Origine blog.csdn.net/qingzhuyuxian/article/details/108101568
conseillé
Classement