Υπάρχει κάποια διαφορά μεταξύ μιας σειράς δεικτών και του δείκτη σε μια σειρά στο C;


Απάντηση 1:

Δεδομένου ότι μόνο μία από τις 6 απαντήσεις εδώ δείχνει πραγματικά τι φαίνεται ένας δείκτης σε διάταξη σε C, θα προσθέσω ένα άλλο:

Ο πίνακας των δεικτών είναι ένας πίνακας, ο οποίος περιέχει δείκτες που δείχνουν σε κάτι άλλο:

#include 
int main (άκυρη) {
  int a = 1, b = 2, c = 3, d = 4,
  int * ap [4] = {a, & b, & c, & d}. // array of pointers σε int
                                 // κρατώντας τέσσερις δείκτες
  για το (int i = 0, i! = 4, ++ i)
    printf ("% d", * ap [i]);
}}

demo: [Wandbox] 三 へ (へ ਊ) へ ハ ッ ハ ッ

Ο δείκτης σε μια συστοιχία είναι ένας δείκτης, ο οποίος δείχνει έναν πίνακα, ο οποίος κρατά κάτι άλλο:

#include 
int main (άκυρη) {
  int a [4] = {1,2,3,4};
  int (* pa) [4] = & a; // δείκτη στον πίνακα των τεσσάρων ιντσών

  για το (int i = 0, i! = 4, ++ i)
    printf ("% d", (* pa) [i]);
}}

demo: [Wandbox] 三 へ (へ ਊ) へ ハ ッ ハ ッ

Μπορείτε επίσης να έχετε έναν δείκτη σε μια σειρά από δείκτες:

int a = 1, b = 2, c = 3, d = 4,
int * ap [4] = {a, & b, & c, & d}. // array of pointers
int * (* pap) [4] = & ap; // δείκτη σε σειρά δείκτες

και μια σειρά από δείκτες σε συστοιχίες:

int a [3] = {1,2,3}, b [3] = {4,5,6}, c [3] = {7,8,9};
int (* apa [3]) [3] = {a, & b, & c}. // array pointers σε πίνακες

και δείκτη προς δείκτη σε πίνακα

int a [4] = {1,2,3,4};
int (* pa) [4] = & a; // δείκτη στον πίνακα των τεσσάρων ιντσών
int (** ppa) [4] = & pa; // δείκτης προς δείκτη στη σειρά τεσσάρων ιντσών

σειρά συστοιχιών των δεικτών

int a = 1, b = 2, c = 3, d = 4,
int * aap [2] [2] = {{& a, & b}, {& c, & d}}. // array of array of pointer

κ.λπ. κλπ. "συστοιχία" και "δείκτης σε" είναι απεριόριστα σύνθετο.


Απάντηση 2:

Yup. Υπάρχει μια διαφορά.

Ας αρχίσουμε με πίνακα.

Όταν δηλώνεται ένας πίνακας, γνωρίζουμε μόνο τη διεύθυνση βάσης του πίνακα.

int a [10].

εδώ 'a' έχει την αρχική διεύθυνση του πίνακα.

Ναι, είναι δείκτης, πιο συγκεκριμένα ένας σταθερός δείκτης που δείχνει σε [0].

Τώρα αφήνει να δει το δείκτη σε έναν πίνακα.

Βασικά, κάνετε ένα σημείο δείκτη σε μια συστοιχία.

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

Εδώ το p δείχνει σε ένα. Σημαίνει ότι μπορείτε να έχετε πρόσβαση σε στοιχεία ενός p χρησιμοποιώντας.

int i; int a [5] = {1, 2, 3, 4, 5}, int * p = a, // ίδιο με το int * p = & a [0] για (i = 0; i <5; i ++) {printf ("% d", * p); p ++ ·}

Αυτό ουσιαστικά εκτυπώνει στοιχεία μιας συστοιχίας.

Τώρα σειρά pointers.its λίγο πιο πολύπλοκη.

Είναι μια σειρά από στοιχεία που είναι δείκτες.

Σημαίνει κάθε στοιχείο στη συστοιχία, δείχνει σε διαφορετική θέση μνήμης. Σκεφτείτε τι λέω;

Ακολουθεί ένα παράδειγμα.

char * όνομα [3] = {"Adam", "chris", "Deniel"

},


Απάντηση 3:

Στο C, ένας δείκτης είναι παρόμοιος με μια αναφορά μνήμης σε μια γλώσσα υψηλού επιπέδου όπως η Java. Έτσι, θα μπορούσατε να σκεφτείτε μια σειρά από δείκτες που είναι παρόμοια με μια σειρά αναφορών μνήμης σε μια γλώσσα υψηλού επιπέδου.

Ένας πίνακας στο C είναι απλά ένα συνεχές μπλοκ μνήμης. Έτσι, ο δείκτης σε μια διάταξη θα ήταν απλώς ένας δείκτης στη διεύθυνση βάσης του πίνακα ή μνήμη αναφοράς στο δείκτη 0 του πίνακα σε μια γλώσσα υψηλού επιπέδου (υποθέτοντας ότι ξεκινάτε από τη διεύθυνση βάσης).


Απάντηση 4:

Στο C, ένας δείκτης είναι παρόμοιος με μια αναφορά μνήμης σε μια γλώσσα υψηλού επιπέδου όπως η Java. Έτσι, θα μπορούσατε να σκεφτείτε μια σειρά από δείκτες που είναι παρόμοια με μια σειρά αναφορών μνήμης σε μια γλώσσα υψηλού επιπέδου.

Ένας πίνακας στο C είναι απλά ένα συνεχές μπλοκ μνήμης. Έτσι, ο δείκτης σε μια διάταξη θα ήταν απλώς ένας δείκτης στη διεύθυνση βάσης του πίνακα ή μνήμη αναφοράς στο δείκτη 0 του πίνακα σε μια γλώσσα υψηλού επιπέδου (υποθέτοντας ότι ξεκινάτε από τη διεύθυνση βάσης).


Απάντηση 5:

Στο C, ένας δείκτης είναι παρόμοιος με μια αναφορά μνήμης σε μια γλώσσα υψηλού επιπέδου όπως η Java. Έτσι, θα μπορούσατε να σκεφτείτε μια σειρά από δείκτες που είναι παρόμοια με μια σειρά αναφορών μνήμης σε μια γλώσσα υψηλού επιπέδου.

Ένας πίνακας στο C είναι απλά ένα συνεχές μπλοκ μνήμης. Έτσι, ο δείκτης σε μια διάταξη θα ήταν απλώς ένας δείκτης στη διεύθυνση βάσης του πίνακα ή μνήμη αναφοράς στο δείκτη 0 του πίνακα σε μια γλώσσα υψηλού επιπέδου (υποθέτοντας ότι ξεκινάτε από τη διεύθυνση βάσης).


Απάντηση 6:

Στο C, ένας δείκτης είναι παρόμοιος με μια αναφορά μνήμης σε μια γλώσσα υψηλού επιπέδου όπως η Java. Έτσι, θα μπορούσατε να σκεφτείτε μια σειρά από δείκτες που είναι παρόμοια με μια σειρά αναφορών μνήμης σε μια γλώσσα υψηλού επιπέδου.

Ένας πίνακας στο C είναι απλά ένα συνεχές μπλοκ μνήμης. Έτσι, ο δείκτης σε μια διάταξη θα ήταν απλώς ένας δείκτης στη διεύθυνση βάσης του πίνακα ή μνήμη αναφοράς στο δείκτη 0 του πίνακα σε μια γλώσσα υψηλού επιπέδου (υποθέτοντας ότι ξεκινάτε από τη διεύθυνση βάσης).