Adakah terdapat sebarang perbezaan di antara pelbagai petunjuk dan penunjuk ke array di C?


Jawapan 1:

Oleh kerana hanya satu daripada 6 jawapan di sini sebenarnya menunjukkan apa penunjuk kepada array kelihatan seperti di C, saya akan menambah yang lain:

Array penunjuk adalah array, yang memegang petunjuk, yang menunjukkan sesuatu yang lain:

#include 
int utama (tidak sah) {
  int a = 1, b = 2, c = 3, d = 4;
  int * ap [4] = {& a, & b, & c, & d}; // pelbagai petunjuk ke int
                                 // memegang empat petunjuk
  untuk (int i = 0; i! = 4; ++ i)
    printf ("% d", * ap [i]);
}

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

Penunjuk ke array adalah penuding, yang menunjuk pada array, yang memegang sesuatu yang lain:

#include 
int utama (tidak sah) {
  int a [4] = {1,2,3,4};
  int (* pa) [4] = & a; / // penunjuk ke array empat ints

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

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

Anda juga boleh mempunyai penuding ke pelbagai petunjuk:

int a = 1, b = 2, c = 3, d = 4;
int * ap [4] = {& a, & b, & c, & d}; // pelbagai petunjuk
int * (* pap) [4] = & ap; / // penunjuk kepada pelbagai petunjuk

dan pelbagai petunjuk untuk tatasusunan:

int a [3] = {1,2,3}, b [3] = {4,5,6}, c [3] = {7,8,9};
int (* apa [3]) [3] = {& a, & b, & c}; // pelbagai petunjuk ke array

dan penunjuk kepada penuding ke array

int a [4] = {1,2,3,4};
int (* pa) [4] = & a; / // penunjuk ke array empat ints
int (** ppa) [4] = & lagi; // penunjuk ke penuding ke array empat ints

pelbagai array petunjuk

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

dan lain-lain dan lain-lain "pelbagai" dan "penunjuk kepada" adalah selama-lamanya komposit.


Jawapan 2:

Yup. Terdapat perbezaan.

Mari mulakan dengan pelbagai.

Apabila array diisytiharkan, kita hanya dapat mengetahui alamat pangkalan array.

int a [10];

di sini 'a' mempunyai alamat permulaan array.

Ya ia adalah penunjuk, lebih khusus penuding tetap yang menunjuk ke [0].

Sekarang mari lihat pointer ke array.

Pada asasnya anda membuat titik penunjuk kepada tatasusunan.

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

Di sini p mata kepada .it bermakna anda boleh mengakses unsur-unsur menggunakan p.

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

Ini pada dasarnya mencetak unsur-unsur array.

Sekarang pelbagai petunjuk adalah lebih kompleks.

Ia adalah pelbagai elemen yang masing-masing adalah petunjuk.

Berarti setiap elemen dalam array, menunjukkan lokasi memori yang berbeza. Dapatkan apa yang saya katakan?

Contohnya.

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

};


Jawapan 3:

Di C, penunjuk mirip dengan rujukan memori dalam bahasa peringkat tinggi seperti Java. Jadi, anda boleh memikirkan pelbagai petunjuk seperti yang serupa dengan pelbagai rujukan memori dalam bahasa tahap tinggi.

Arahan dalam C hanya blok ingatan yang berterusan. Jadi penuding ke array hanya akan menjadi penunjuk ke alamat asas array atau rujukan memori untuk indeks 0 array dalam bahasa tingkat tinggi (dengan asumsi anda bermula dari alamat asas).


Jawapan 4:

Di C, penunjuk mirip dengan rujukan memori dalam bahasa peringkat tinggi seperti Java. Jadi, anda boleh memikirkan pelbagai petunjuk seperti yang serupa dengan pelbagai rujukan memori dalam bahasa tahap tinggi.

Arahan dalam C hanya blok ingatan yang berterusan. Jadi penuding ke array hanya akan menjadi penunjuk ke alamat asas array atau rujukan memori untuk indeks 0 array dalam bahasa tingkat tinggi (dengan asumsi anda bermula dari alamat asas).


Jawapan 5:

Di C, penunjuk mirip dengan rujukan memori dalam bahasa peringkat tinggi seperti Java. Jadi, anda boleh memikirkan pelbagai petunjuk seperti yang serupa dengan pelbagai rujukan memori dalam bahasa tahap tinggi.

Arahan dalam C hanya blok ingatan yang berterusan. Jadi penuding ke array hanya akan menjadi penunjuk ke alamat asas array atau rujukan memori untuk indeks 0 array dalam bahasa tingkat tinggi (dengan asumsi anda bermula dari alamat asas).


Jawapan 6:

Di C, penunjuk mirip dengan rujukan memori dalam bahasa peringkat tinggi seperti Java. Jadi, anda boleh memikirkan pelbagai petunjuk seperti yang serupa dengan pelbagai rujukan memori dalam bahasa tahap tinggi.

Arahan dalam C hanya blok ingatan yang berterusan. Jadi penuding ke array hanya akan menjadi penunjuk ke alamat asas array atau rujukan memori untuk indeks 0 array dalam bahasa tingkat tinggi (dengan asumsi anda bermula dari alamat asas).