Maison  >  Article  >  développement back-end  >  Pourquoi l'adresse d'un tableau en C est-elle équivalente à l'adresse d'un pointeur vers son premier élément ?

Pourquoi l'adresse d'un tableau en C est-elle équivalente à l'adresse d'un pointeur vers son premier élément ?

DDD
DDDoriginal
2024-11-22 08:08:10181parcourir

Why is the address of an array in C equivalent to the address of a pointer to its first element?

Comprendre l'équivalence des adresses de tableau et des pointeurs convertis

Dans le langage de programmation C, il est courant de convertir un tableau en un pointeur vers son premier élément en utilisant la conversion tableau en pointeur. Cela soulève la question de savoir pourquoi l'adresse du tableau est la même que l'adresse du pointeur converti.

Pour illustrer ce concept, considérons le code suivant :

int t[10];

int *u = t;

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

La sortie de ce code démontre l'équivalence des adresses de tableau et des adresses de pointeur converties :

0045FB88 0045FB88
0045FB88 0045FB7C

Pour comprendre ce phénomène, nous devons reconnaître deux significations distinctes associées au symbole t:

  • Expression de tableau : Lorsqu'il est utilisé seul, t est traité comme une expression de tableau. Cette expression est automatiquement convertie en pointeur vers le premier élément du tableau (c'est-à-dire &t[0]) dans la plupart des contextes, y compris les opérations de sortie.
  • Pointeur vers le tableau : Lorsqu'il est précédé de l'opérateur &, t est traité comme un pointeur vers le tableau lui-même. Cette opération donne l'adresse de l'ensemble du tableau, pas seulement de son premier élément.

Dans notre code, la première ligne de la sortie affiche l'adresse de t (le tableau) et l'adresse de &t ( le pointeur vers le tableau). Puisque les tableaux sont des blocs de mémoire contigus, leurs adresses de départ sont identiques.

La deuxième ligne de sortie affiche l'adresse de u (le pointeur converti vers le premier élément) et l'adresse de &u (le pointeur vers le premier élément converti). aiguille). Encore une fois, ces adresses sont les mêmes car u est essentiellement équivalent à &t[0].

Par conséquent, nous concluons que la raison pour laquelle l'adresse d'un tableau est la même que l'adresse du tableau convertie en pointeur est car les deux représentent l’adresse de départ du bloc mémoire contigu occupé par le tableau. Cette équivalence est valable car la conversion tableau en pointeur produit un pointeur vers le premier élément du tableau, qui a le même emplacement mémoire que le début du tableau entier.

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