Itération dans un tableau de style C n’utilisant pas de pointeur

J’apprends l’arithmétique de pointeur et j’ai un morceau de code qui me donne des erreurs pendant un certain temps. toute aide serait appréciée. (Je ne pouvais pas le trouver sur SO)

int arr [] = {1, 2, 3, 4, 5} ; for (int i = 0 ; i < 5 ; i++) { cout << *arr ; arr++ ; } cout << *arr << endl ; 

Je suis incapable de comprendre l’erreur que je reçois dans codeblocks. Je reçois cette déclaration.

  error: lvalue required as increment operand| ||=== Build finished: 1 errors, 0 warnings ===| 

Dans ce code, je dois itérer le tableau sans déréférencer ou utiliser l’opérateur [] .

Vous obtenez cette erreur lorsque vous essayez d’incrémenter le tableau. Il n’est pas valide car en c ++, le nom du tableau peut être implicitement converti en un pointeur constant sur le tout premier index. Vous ne pouvez pas incrémenter un tableau, car un tableau est un conteneur et l’incrémentation d’un conteneur n’a aucun sens.

Pour répondre complètement à votre question, il me faudrait expliquer certaines choses. Laissez-moi essayer et les autres peuvent append po

N’oubliez pas qu’il existe trois types de pointeurs constants.

1.Pointer sur un emplacement de mémoire constant. Il s’agit d’un pointeur normal, mais il pointe vers une variable de nature constante (lecture seule variable en fait). Cela signifie que la valeur de la variable vers laquelle elle pointe ne peut pas être modifiée. Normalement, on utilise une variable constante comme celle-ci.

 const int x = 10 ; const int *ptr = & x ; 

ici, vous ne pouvez pas faire *ptr = 5 ; parce que le pointeur pointe vers une variable constante.

2.Const pointeur vers un emplacement de mémoire. Il s’agit d’un pointeur qui ne peut pointer que sur un seul emplacement mémoire du programme. La valeur de la variable sur laquelle il pointe peut être modifiée, mais le pointeur lui-même est constant. C’est déclaré comme ça.

 int x = 10, y = 5 ; int * const ptr = &x ; 

vous ne pouvez pas faire ptr = &y ; plus tard dans le programme. Un tableau peut également être implicitement converti en un pointeur constant sur un emplacement de mémoire. Donc, il ne peut pas être incrémenté ou décrémenté de cette manière. (Vous pouvez lire à ce sujet ici si vous aimez: Qu’est-ce qu’un tableau en décomposition? )

Pointeur 3.Constant vers un emplacement de mémoire constant. C’est un pointeur qui est lui-même constant et pointe également vers un emplacement de mémoire constant. c’est déclaré comme ça.

 const int x = 8 ; const int * const ptr = &x ; 

Cela signifie que vous ne pouvez pas non plus pointer le pointeur ailleurs que sur l’emplacement initialisé et que vous ne pouvez même pas modifier la valeur de l’emplacement sur lequel il pointe.

J’espère que le concept est maintenant très clair. Passons maintenant à votre question: vous voulez imprimer le tableau avec l’arithmétique de pointeur, mais vous ne pouvez pas incrémenter le tableau lui-même. Une solution consiste donc à créer un autre pointeur (normal) et à lui atsortingbuer l’adresse du premier index du tableau. Ensuite, vous pouvez incrémenter, décrémenter ou changer la valeur de ce tableau. Quelque chose comme ça.

 int arr [] = {1, 2, 3, 4, 5} ; int *ptr = arr ; for (int i = 0 ; i < 5 ; i++) { cout << *ptr << " " ; ptr++ ; } 

Donc, vous pouvez toujours faire:

 int arr [] = {1, 2, 3, 4, 5} ; int *a = arr; for (int i = 0 ; i < 5 ; i++) { cout << *a ; a++ ; }