Y a-t-il une différence entre un tableau de pointeurs et le pointeur vers un tableau en C?


Réponse 1:

Puisqu'une seule des 6 réponses ici montre réellement à quoi ressemble un pointeur vers un tableau en C, j'en ajouterai une autre:

Un tableau de pointeurs est un tableau contenant des pointeurs qui pointent vers autre chose:

#include 
int main (void) {
  int a = 1, b = 2, c = 3, d = 4;
  int * ap [4] = {& a, & b, & c, & d}; // tableau de pointeurs vers int
                                 // tenant quatre pointeurs
  pour (int i = 0; i! = 4; ++ i)
    printf ("% d", * ap [i]);
}

démo: [Wandbox] 三 へ (へ՞ ਊ՞) へ ハ ッ ハ ッ

Le pointeur vers un tableau est un pointeur, qui pointe vers un tableau, qui contient autre chose:

#include 
int main (void) {
  int a [4] = {1,2,3,4};
  int (* pa) [4] = & a; // pointeur vers le tableau de quatre pouces

  pour (int i = 0; i! = 4; ++ i)
    printf ("% d", (* pa) [i]);
}

démo: [Wandbox] 三 へ (へ՞ ਊ՞) へ ハ ッ ハ ッ

Vous pouvez également avoir un pointeur vers un tableau de pointeurs:

int a = 1, b = 2, c = 3, d = 4;
int * ap [4] = {& a, & b, & c, & d}; // tableau de pointeurs
int * (* pap) [4] = & ap; // pointeur vers un tableau de pointeurs

et un tableau de pointeurs vers des tableaux:

int a [3] = {1,2,3}, b [3] = {4,5,6}, c [3] = {7,8,9};
int (* apa [3]) [3] = {& a, & b, & c}; // tableau de pointeurs vers des tableaux

et un pointeur vers le pointeur vers le tableau

int a [4] = {1,2,3,4};
int (* pa) [4] = & a; // pointeur vers le tableau de quatre pouces
int (** ppa) [4] = & pa; // pointeur vers pointeur sur le tableau de quatre pouces

tableau de tableau de pointeurs

int a = 1, b = 2, c = 3, d = 4;
int * aap [2] [2] = {{& a, & b}, {& c, & d}}; // tableau de tableau de pointeur

etc etc. "tableau de" et "pointeur vers" sont indéfiniment composables.


Réponse 2:

Oui, il y a une différence.

Commençons par le tableau.

Lorsqu'un tableau est déclaré, nous ne connaissons que l'adresse de base du tableau.

int a [10];

ici «a» a l'adresse de départ du tableau.

Oui, c'est un pointeur, plus précisément un pointeur constant qui pointe vers un [0].

Voyons maintenant le pointeur vers un tableau.

Fondamentalement, vous créez un pointeur sur un tableau.

int a [10];
int * p;
p = a; // ou p = & a [0];

Ici, p pointe vers un .it signifie que vous pouvez accéder aux éléments d'un utilisant p.

int i; int a [5] = {1, 2, 3, 4, 5}; int * p = a; // identique à int * p = & a [0] pour (i = 0; i <5; i ++) {printf ("% d", * p); p ++;}

Cela imprime essentiellement les éléments d'un tableau.

Maintenant, le tableau de pointeurs est légèrement plus complexe.

Il s'agit d'un tableau d'éléments qui sont chacun des pointeurs.

Signifie chaque élément du tableau, pointe vers un emplacement de mémoire différent.

Voici un exemple.

char * name [3] = {"Adam", "chris", "Deniel"

};


Réponse 3:

En C, un pointeur est similaire à une référence mémoire dans un langage de haut niveau comme Java. Vous pourriez donc penser à un tableau de pointeurs comme similaire à un tableau de références de mémoire dans un langage de haut niveau.

Un tableau en C n'est qu'un bloc de mémoire continu. Ainsi, le pointeur vers un tableau serait simplement un pointeur vers l'adresse de base du tableau ou une référence mémoire pour indexer 0 du tableau dans un langage de haut niveau (en supposant que vous démarrez à partir de l'adresse de base).


Réponse 4:

En C, un pointeur est similaire à une référence mémoire dans un langage de haut niveau comme Java. Vous pourriez donc penser à un tableau de pointeurs comme similaire à un tableau de références de mémoire dans un langage de haut niveau.

Un tableau en C n'est qu'un bloc de mémoire continu. Ainsi, le pointeur vers un tableau serait simplement un pointeur vers l'adresse de base du tableau ou une référence mémoire pour indexer 0 du tableau dans un langage de haut niveau (en supposant que vous démarrez à partir de l'adresse de base).


Réponse 5:

En C, un pointeur est similaire à une référence mémoire dans un langage de haut niveau comme Java. Vous pourriez donc penser à un tableau de pointeurs comme similaire à un tableau de références de mémoire dans un langage de haut niveau.

Un tableau en C n'est qu'un bloc de mémoire continu. Ainsi, le pointeur vers un tableau serait simplement un pointeur vers l'adresse de base du tableau ou une référence mémoire pour indexer 0 du tableau dans un langage de haut niveau (en supposant que vous démarrez à partir de l'adresse de base).


Réponse 6:

En C, un pointeur est similaire à une référence mémoire dans un langage de haut niveau comme Java. Vous pourriez donc penser à un tableau de pointeurs comme similaire à un tableau de références de mémoire dans un langage de haut niveau.

Un tableau en C n'est qu'un bloc de mémoire continu. Ainsi, le pointeur vers un tableau serait simplement un pointeur vers l'adresse de base du tableau ou une référence mémoire pour indexer 0 du tableau dans un langage de haut niveau (en supposant que vous démarrez à partir de l'adresse de base).