powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / указатель на массив. что это такое ?
25 сообщений из 158, страница 1 из 7
указатель на массив. что это такое ?
    #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
указатель на массив. что это такое ?
    #39969022
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Массив -- это тип. Указатель на массив ничем не отличается от указателя на структуру или на int. Вам нужно просто абстрактность своего мышления поднять на ступеньку вверх и всё встанет на свои места.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #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
указатель на массив. что это такое ?
    #39969029
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravМассив -- это тип.

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

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

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

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

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

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

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

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

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


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


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

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

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


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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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



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

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

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

круто.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #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
указатель на массив. что это такое ?
    #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
указатель на массив. что это такое ?
    #39969051
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Но если настаиваешь - пожалуйста, можешь дальше пытаться
объяснять почему "typedef int[5] arr5; arr5 x;" не работает, раз уж массив это тип.
Какая связь между тем, что массив это тип и тем, почему код (не) должен работать?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969054
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav

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

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

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

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

В спецификации typedef написано "первый параметр - тип".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #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
указатель на массив. что это такое ?
    #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
указатель на массив. что это такое ?
    #39969064
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81у меня это работает :)

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


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