Hi ha alguna diferència entre una matriu de punters i el punter a una matriu en C?


Resposta 1:

Com que només una de les sis respostes aquí mostra realment el que sembla un punter a la matriu en C, afegiré un altre:

Array of punters és una matriu, que conté els apunts, que apunten a una altra cosa:

#incloure 
int principal (nul) {
  int a = 1, b = 2, c = 3, d = 4;
  int * ap [4] = {& a, & b, & c, & d}; // matriu de punters a int
                                 // sostenint quatre indicadors
  per a (int i = 0; i! = 4; ++ i)
    printf ("% d", * ap [i]);
}

demostració: [Wandbox] 三 へ (へ՞ ਊ՞) へ ハ ッ ハ ッ

El punter a una matriu és un punter, que apunta a una matriu, que conté una altra cosa:

#incloure 
int principal (nul) {
  int a [4] = {1,2,3,4};
  int (* pa) [4] = & a; // punter a la matriu de quatre ints

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

demostració: [Wandbox] 三 へ (へ՞ ਊ՞) へ ハ ッ ハ ッ

També podeu tenir un punter a una matriu de punters:

int a = 1, b = 2, c = 3, d = 4;
int * ap [4] = {& a, & b, & c, & d}; // matriu de punters
int * (* pap) [4] = & ap; // punter a matriu d’acords

i una matriu de punters a matrius:

int a [3] = {1,2,3}, b [3] = {4,5,6}, c [3] = {7,8,9};
int (* apa [3]) [3] = {& a, & b, & c}; // matriu de punters a matrius

i un punter a punter a matriu

int a [4] = {1,2,3,4};
int (* pa) [4] = & a; // punter a la matriu de quatre ints
int (** ppa) [4] = & pa; // punter al punter a la matriu de quatre int

matriu d'indicadors

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

etc, etc. La matriu de "i el punter a" són composables indefinidament.


Resposta 2:

Sí, hi ha una diferència.

Comencem amb la matriu.

Quan es declara una matriu, només coneixem l’adreça base de la matriu.

int a [10];

aquí "a" té l'adreça inicial de la matriu.

Sí, és un punter, més concretament un punter constant que apunta a un [0].

Ara veure el punter a una matriu.

Bàsicament esteu fent un apuntador cap a una matriu.

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

Aquí p apunta a .it vol dir que podeu accedir a elements d'un ús p.

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

Bàsicament imprimeix elements d'una matriu.

Ara la matriu de pointers.its és una mica més complexa.

Es tracta d'una sèrie d'elements cadascun dels quals són indicadors.

Significa que cada element de la matriu apunta a diferents ubicacions de la memòria. ¿Què dic?

Aquí teniu un exemple.

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

};


Resposta 3:

En C, un punter és similar a una referència de memòria en un llenguatge d'alt nivell com Java. De manera que podríeu pensar en una matriu de punters com similar a una matriu de referències de memòria en un llenguatge d'alt nivell.

Una matriu en C és només un bloc continu de memòria. De manera que el punter a una matriu seria només un punter a l'adreça base de la matriu o una referència de memòria a l'índex 0 de la matriu en un llenguatge d'alt nivell (suposant que partiu de l'adreça base).


Resposta 4:

En C, un punter és similar a una referència de memòria en un llenguatge d'alt nivell com Java. De manera que podríeu pensar en una matriu de punters com similar a una matriu de referències de memòria en un llenguatge d'alt nivell.

Una matriu en C és només un bloc continu de memòria. De manera que el punter a una matriu seria només un punter a l'adreça base de la matriu o una referència de memòria a l'índex 0 de la matriu en un llenguatge d'alt nivell (suposant que partiu de l'adreça base).


Resposta 5:

En C, un punter és similar a una referència de memòria en un llenguatge d'alt nivell com Java. De manera que podríeu pensar en una matriu de punters com similar a una matriu de referències de memòria en un llenguatge d'alt nivell.

Una matriu en C és només un bloc continu de memòria. De manera que el punter a una matriu seria només un punter a l'adreça base de la matriu o una referència de memòria a l'índex 0 de la matriu en un llenguatge d'alt nivell (suposant que partiu de l'adreça base).


Resposta 6:

En C, un punter és similar a una referència de memòria en un llenguatge d'alt nivell com Java. De manera que podríeu pensar en una matriu de punters com similar a una matriu de referències de memòria en un llenguatge d'alt nivell.

Una matriu en C és només un bloc continu de memòria. De manera que el punter a una matriu seria només un punter a l'adreça base de la matriu o una referència de memòria a l'índex 0 de la matriu en un llenguatge d'alt nivell (suposant que partiu de l'adreça base).