Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / указатель на массив. что это такое ? / 25 сообщений из 158, страница 1 из 7
14.06.2020, 16:27
    #39969016
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
Не совсем понятна эта рыба.

Вот объявляем 2 переменных :

Код: plaintext
1.
2.
int (*a)[5];
int* b;



а затем делаем вот так и прокатывает :
b = *a;

Верно ли я понимаю что грубо говоря в *a содержится адрес на первый элемент массива ?
то есть если есть интовая переменная :
Код: plaintext
1.
 int c;


то дальше можно вот так делать :

Код: plaintext
1.
2.
3.
    c = **a;
//или
    c = *a[0];



Кто - нить использует такие вещи , а то стараюсь понять классику Кернигана, но тут же подумал кто эту жесть сейчас пользует ???
...
Рейтинг: 0 / 0
14.06.2020, 16:52
    #39969022
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
andron81,

Массив -- это тип. Указатель на массив ничем не отличается от указателя на структуру или на int. Вам нужно просто абстрактность своего мышления поднять на ступеньку вверх и всё встанет на свои места.
...
Рейтинг: 0 / 0
14.06.2020, 17:04
    #39969028
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
есть две разные вещи

1) Pointer to an array
int (*a)[5];

typical use case: 2d array

2) Array of pointers
int *a[5]

typical use case: array of strings
...
Рейтинг: 0 / 0
14.06.2020, 17:04
    #39969029
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
petravМассив -- это тип.

Не надо подымать предыдущую тему, её уже всю перетёрли до дыр.

В языке Си массив неявно приводится к указателю на первый элемент.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.06.2020, 17:07
    #39969030
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
andron81Не совсем понятна эта рыба.

Тебе уже говорили читать объявления справа налево. Пока ты это не освоишь, дальше можешь
даже не пытаться двигаться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.06.2020, 17:16
    #39969031
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
Dimitry Sibiryakov

petravМассив -- это тип.

Не надо подымать предыдущую тему, её уже всю перетёрли до дыр.
Я не поднимаю эту тему. Я ответил по сути и ответил правильно. Или эта тема — уже табу?

Dimitry Sibiryakov
В языке Си массив неявно приводится к указателю на первый элемент.

Да. А char неявно приводится к int. Но это тут не при чём.
...
Рейтинг: 0 / 0
14.06.2020, 17:27
    #39969032
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
petravЯ ответил по сути и ответил правильно. Или эта тема — уже табу?

Эта тема - флеймогенератор. Но если настаиваешь - пожалуйста, можешь дальше пытаться
объяснять почему "typedef int[5] arr5; arr5 x;" не работает, раз уж массив это тип.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.06.2020, 17:31
    #39969033
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
Dimitry Sibiryakov

Тебе уже говорили читать объявления справа налево.


справа налево, неужели ? как раз пример :
Код: plaintext
1.
int (* a)[5]


это указатель на массив из 5 элементов.

то есть ни фига тут не справа налево, потому что скобки стоят круглые. а стоят они потому что квадратные имеют больший приоритет над "*".
а без них (круглых ) это был бы массив из указателей: int * a[5] .

вот скажем правило на хабре :
То, что будет в середине, обычно сложнее разобрать, но можно сформулировать правило:
двигайтесь вправо, если это возможно, и перемещайтесь влево если это необходимо
Начиная с имени переменной, соблюдая правила приоритета, двигайтесь вправо насколько это возможно вычеркивая лексемы, пока не дойдете до группирующих скобок.После же перемещайтесь налево в соответствии со скобками.


и можно мне не объяснять(mini.weblab), что есть массив из указателей и указатель на массив из 5 элементов.
суть вопроса совсем не в этом была
...
Рейтинг: 0 / 0
14.06.2020, 17:34
    #39969034
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
andron81,

А в чём была суть вопроса?
...
Рейтинг: 0 / 0
14.06.2020, 17:35
    #39969035
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
petrav,

Верно ли я понимаю что грубо говоря в *a содержится адрес на первый элемент массива ?
...
Рейтинг: 0 / 0
14.06.2020, 17:35
    #39969036
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
andron81то есть ни фига тут не справа налево, потому что скобки стоят круглые. а стоят они потому
что квадратные имеют больший приоритет над "*".

И, внезапно, квадратные скобки стоят правее звёздочки. Совпадение? Не думаю.

Почему бы не написать так: "int[5] *a;"?.. (Вопрос риторический.)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.06.2020, 17:37
    #39969037
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
andron81Верно ли я понимаю что грубо говоря в *a содержится адрес на первый элемент массива ?

Нет. Этот адрес содержится непосредственно в a. В *а - сам массив, который (случайно) в
присвоении ниже приводится обратно к указателю.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.06.2020, 17:53
    #39969041
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
Dimitry Sibiryakov

Почему бы не написать так: "int[5] *a;"?.. (Вопрос риторический.)

Но ведь это же не компилируется.
...
Рейтинг: 0 / 0
14.06.2020, 17:57
    #39969044
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
Dimitry Sibiryakov

Почему бы не написать так: "int[5] *a;"?.. (Вопрос риторический.)


такая семантика была бы более логичной скажем аналогично тому же паскалю.
но в Си так нельзя. наверно на это есть причины. почему в Си по другому. хотелось бы про них почитать
...
Рейтинг: 0 / 0
14.06.2020, 18:03
    #39969046
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
Dimitry Sibiryakov

Нет. Этот адрес содержится непосредственно в a.


ну да, согласен. тут переварил. тут ответ получен.
...
Рейтинг: 0 / 0
14.06.2020, 18:06
    #39969047
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
andron81
petrav,

Верно ли я понимаю что грубо говоря в *a содержится адрес на первый элемент массива ?

В "a" содержится указатель на массив. По факту, в нём содержится указатель на первый элемент массива. Но по сути в нём содержится указатель на массив.

Если бы "a" был бы указателем на структуру из int-ов, то по факту "a" содержал бы указатель на первый int в этой структуре.

А "*a" — это разименование указателя. Что ж тут непонятного.
...
Рейтинг: 0 / 0
14.06.2020, 18:10
    #39969048
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
petrav
andron81
petrav,

Верно ли я понимаю что грубо говоря в *a содержится адрес на первый элемент массива ?

В "a" содержится указатель на массив. По факту, в нём содержится указатель на первый элемент массива. Но по сути в нём содержится указатель на массив.

Если бы "a" был бы указателем на структуру из int-ов, то по факту "a" содержал бы указатель на первый int в этой структуре.

А "*a" — это разименование указателя. Что ж тут непонятного.



зелен тут пока ещё вот и путаюсь.

а вот это удивительно (хоть до структур не дошёл , но что это я знаю):
petrav

Если бы "a" был бы указателем на структуру из int-ов, то по факту "a" содержал бы указатель на первый int в этой структуре.

круто.
...
Рейтинг: 0 / 0
14.06.2020, 18:13
    #39969049
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
petrav,

ладно , последний вопрос, а почему вот так не даёт ?

Код: plaintext
1.
2.
3.
4.
    int f[5] = { 1,2,3,4,5 };
    int (*a)[5];
    a = &f[0];
    a = f;
...
Рейтинг: 0 / 0
14.06.2020, 18:21
    #39969050
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
andron81
petrav,

ладно , последний вопрос, а почему вот так не даёт ?

Код: plaintext
1.
2.
3.
4.
    int f[5] = { 1,2,3,4,5 };
    int (*a)[5];
    a = &f[0];
    a = f;


Тут "a" — это указатель на массив. В первом случае ты ему пытаешься присвоить указатель на первый элемент массива. Ну корректно ли это?

Во втором случае "f" — это массив. Эта переменная может неявно привестить к указателю на элемент массива. А ты пытаешься присвоить это указателю на массив.
...
Рейтинг: 0 / 0
14.06.2020, 18:33
    #39969051
a guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
Dimitry Sibiryakov
Но если настаиваешь - пожалуйста, можешь дальше пытаться
объяснять почему "typedef int[5] arr5; arr5 x;" не работает, раз уж массив это тип.
Какая связь между тем, что массив это тип и тем, почему код (не) должен работать?
...
Рейтинг: 0 / 0
14.06.2020, 18:40
    #39969054
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
petrav

Тут "a" — это указатель на массив. В первом случае ты ему пытаешься присвоить указатель на первый элемент массива. Ну корректно ли это?

ну а почему не корректно то ?
ты же сам писал:
В "a" содержится указатель на массив. По факту, в нём содержится указатель на первый элемент массива. Но по сути в нём содержится указатель на массив.

итого имеем :
1) f это массив из 5 интовых элементов. в f(или в &f[0]) содержится адрес первого элемента.
2) переменная a указатель на массив из 5 элементов. и читаем что ты писал(а с этим я согласен)

то есть по сути всё соблюдено наверно .
а нет...
...
Рейтинг: 0 / 0
14.06.2020, 18:48
    #39969056
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
a guestКакая связь между тем, что массив это тип и тем, почему код (не) должен работать?

В спецификации typedef написано "первый параметр - тип".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.06.2020, 18:52
    #39969058
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
Dimitry Sibiryakov

a guestКакая связь между тем, что массив это тип и тем, почему код (не) должен работать?

В спецификации typedef написано "первый параметр - тип".


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
typedef int arr5[5];
arr5 x;

int main()
{

    x[0] = 0;
    x[1] = 10;
    x[2] = 20;
    x[3] = 30;
    x[4] = 40;
}



может я что-то не понял, но у меня это работает :)
...
Рейтинг: 0 / 0
14.06.2020, 19:08
    #39969061
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
то есть дело то может быть в синтаксисе . да, так нельзя :

Код: plaintext
1.
typedef int[5] arr5;


а вот так можно :
Код: plaintext
1.
typedef int arr5[5];



то есть логичнее на мой взгляд вот наподобие как студенческом паскале :
Код: plaintext
1.
typedef int[5] arr5;



и тогда массив можно было бы назвать типом.

Но почему взят за основу синтаксис :
Код: plaintext
1.
typedef int arr5[5];



загадка
я спрашивал у Сибирякова , он наверняка знает. но писать не хочет
...
Рейтинг: 0 / 0
14.06.2020, 19:18
    #39969064
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатель на массив. что это такое ?
andron81у меня это работает :)

Но у тебя первый параметр - не массив.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / указатель на массив. что это такое ? / 25 сообщений из 158, страница 1 из 7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]