Има ли разлика между масив от указатели и показалец към масив в C?


Отговор 1:

Тъй като само един от 6 отговора тук всъщност показва как изглежда показалец на масива в C, ще добавя друг:

Масив указатели е масив, който държи указатели, които сочат към нещо друго:

#include 
int main (void) {
  int a = 1, b = 2, c = 3, d = 4;
  int * ap [4] = {& a, & b, & c, & d}; // масив от указатели към int
                                 // задържане на четири указателя
  за (int i = 0; i! = 4; ++ i)
    printf ("% d", * ap [i]);
}

демонстрация: [Wandbox] 三 へ (へ՞ ਊ՞) へ ハ ッ ハ ッ

Показалец към масив е указател, който сочи масив, който съдържа нещо друго:

#include 
int main (void) {
  int a [4] = {1,2,3,4};
  int (* pa) [4] = & a; // указател към масива от четири вх

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

демонстрация: [Wandbox] 三 へ (へ՞ ਊ՞) へ ハ ッ ハ ッ

Можете също така да имате указател към масив от указатели:

int a = 1, b = 2, c = 3, d = 4;
int * ap [4] = {& a, & b, & c, & d}; // масив от указатели
int * (* pap) [4] = & ap; // указател към масив от указатели

и масив от указатели към масиви:

int a [3] = {1,2,3}, b [3] = {4,5,6}, с [3] = {7,8,9};
int (* apa [3]) [3] = {& a, & b, & c}; // масив от указатели към масиви

и указател на показалец за масив

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}}; // масив от масив от показалец

и т.н. и т.н. „масивът от“ и „указателят на“ са за неограничено време за съставяне.


Отговор 2:

Да, има разлика.

Да започнем с масива.

Когато масивът е деклариран, ние се запознаваме само с основния адрес на масива.

int a [10];

тук 'a' има начален адрес на масив.

Да, това е указател, по-точно постоянен показалец, който сочи към [0].

Сега нека да видим показалец на масив.

По принцип правите указател на масив.

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

Тук p сочи към .it означава, че можете да получите достъп до елементи на използващото p.

int i; int a [5] = {1, 2, 3, 4, 5}; int * p = a; // същото като int * p = & a [0] for (i = 0; i <5; i ++) {printf ("% d", * p); р ++;}

Това основно отпечатва елементи от масив.

Сега масив от pointers.its малко по-сложен.

Това е масив от елементи, всеки от които е указатели.

Означава всеки елемент в масива, сочи към различна памет location.get какво казвам?

Ето един пример.

char * name [3] = {"Адам", "Крис", "Дениел"

};


Отговор 3:

В C показалецът е подобен на паметта на езика на високо ниво като Java. Така че можете да мислите за масив от указатели като подобен на масив от препратки към паметта на език от високо ниво.

Масивът в C е просто непрекъснат блок памет. Така че показалеца към масива би бил просто указател към базовия адрес на масива или препратка към паметта към индекс 0 на масива на език на високо ниво (ако приемем, че започвате от базовия адрес).


Отговор 4:

В C показалецът е подобен на паметта на езика на високо ниво като Java. Така че можете да мислите за масив от указатели като подобен на масив от препратки към паметта на език от високо ниво.

Масивът в C е просто непрекъснат блок памет. Така че показалеца към масива би бил просто указател към базовия адрес на масива или препратка към паметта към индекс 0 на масива на език на високо ниво (ако приемем, че започвате от базовия адрес).


Отговор 5:

В C показалецът е подобен на паметта на езика на високо ниво като Java. Така че можете да мислите за масив от указатели като подобен на масив от препратки към паметта на език от високо ниво.

Масивът в C е просто непрекъснат блок памет. Така че показалеца към масива би бил просто указател към базовия адрес на масива или препратка към паметта към индекс 0 на масива на език на високо ниво (ако приемем, че започвате от базовия адрес).


Отговор 6:

В C показалецът е подобен на паметта на езика на високо ниво като Java. Така че можете да мислите за масив от указатели като подобен на масив от препратки към паметта на език от високо ниво.

Масивът в C е просто непрекъснат блок памет. Така че показалеца към масива би бил просто указател към базовия адрес на масива или препратка към паметта към индекс 0 на масива на език на високо ниво (ако приемем, че започвате от базовия адрес).