Maison >développement back-end >C++ >Comment la conversion tableau en pointeur et l'adresse de l'opérateur (&) affectent-elles les adresses de tableau en C ?

Comment la conversion tableau en pointeur et l'adresse de l'opérateur (&) affectent-elles les adresses de tableau en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-07 15:08:13863parcourir

How Do Array-to-Pointer Conversion and the Address-of Operator (&) Affect Array Addresses in C  ?

Comprendre les adresses de tableau et la conversion de pointeurs

En C, les tableaux et les pointeurs sont étroitement liés, mais comprendre leur relation peut être délicat. Explorons l'extrait de code suivant pour approfondir le sujet :

int t[10];

int * u = t;

cout << t << " " << &t << endl;
cout << u << " " << &u << endl;

Le résultat que vous observez est :

0045FB88 0045FB88
0045FB88 0045FB7C

Déchiffrement du résultat

L'adresse de u (0045FB88) est compréhensible, car elle pointe vers le premier élément du tableau t. Cependant, la partie déroutante survient lors de l'analyse des expressions impliquant t.

  • t : Il représente l'adresse du premier élément du tableau, qui est la même que &t[0 ].
  • &t : Étonnamment, il donne également la même valeur (0045FB88) que t. Mais pourquoi ?

Conversion tableau en pointeur par rapport à l'adresse du tableau

La clé pour comprendre ce comportement réside dans la façon dont t est utilisé dans les expressions .

  • Lorsque t est utilisé seul, une conversion tableau en pointeur se produit automatiquement. Cette conversion produit implicitement un pointeur vers le premier élément du tableau.
  • En revanche, lorsque t est utilisé comme argument de l'opérateur &, aucune conversion tableau en pointeur n'a lieu. Au lieu de cela, le & prend explicitement l'adresse du tableau lui-même.

Par conséquent, &t n'est pas un pointeur vers le premier élément du tableau mais plutôt un pointeur vers l'ensemble du tableau.

Emplacements mémoire

En mémoire, le premier élément du tableau et le début du tableau occupent le même emplacement. C'est pourquoi t, &t[0] et &t ont tous la même valeur.

En conclusion, les expressions impliquant t démontrent la différence entre la conversion tableau en pointeur et la prise explicite de l'adresse d'un tableau en utilisant l'opérateur &. Comprendre cette distinction est crucial pour travailler efficacement avec des tableaux et des pointeurs en C .

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn