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

andron81у меня это работает :)

Но у тебя первый параметр - не массив.


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

petravЯ ответил по сути и ответил правильно. Или эта тема — уже табу?

Эта тема - флеймогенератор. Но если настаиваешь - пожалуйста, можешь дальше пытаться
объяснять почему "typedef int[5] arr5; arr5 x;" не работает, раз уж массив это тип.

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

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

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

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

то есть по сути всё соблюдено наверно .
а нет...

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

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

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

то есть по сути всё соблюдено наверно .
а нет...

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


есть разница по твоей теории между кодами ?
Код: plaintext
1.
2.
3.
4.
    int f[5] = { 1,2,3,4,5 };
    int(*a)[5];
    a = &f[0];
    a = f;



Код: plaintext
1.
2.
3.
    int f=5;
    int *a;
    a = &f;


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

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


есть разница по твоей теории между кодами ?
Код: plaintext
1.
2.
3.
4.
    int f[5] = { 1,2,3,4,5 };
    int(*a)[5];
    a = &f[0];
    a = f;



Код: plaintext
1.
2.
3.
    int f=5;
    int *a;
    a = &f;


первый код не рабочий, второй рабочий

Тут-то что не понятно? Кури Кернигана-Ритчи снова.

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


есть разница по твоей теории между кодами ?
Код: plaintext
1.
2.
3.
4.
    int f[5] = { 1,2,3,4,5 };
    int(*a)[5];
    a = &f[0];
    a = f;



Код: plaintext
1.
2.
3.
    int f=5;
    int *a;
    a = &f;


первый код не рабочий, второй рабочий

Тут-то что не понятно? Кури Кернигана-Ритчи снова.

Представь себе, что у нас есть координаты истока Днепра. По факту это некий ручей, но по сути это начало реки.


Я и учу по нему. Не понятно почему первый код не катит.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969086
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
a guestКакая связь между тем, что массив это тип и тем, почему код (не) должен работать?
В спецификации typedef написано "первый параметр - тип".Ну возьмём, например, драфт C11 или драфт C++17 . Где там такое написано?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969087
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andron81
то есть дело то может быть в синтаксисе . да, так нельзя :

typedef int[5] arr5;
а вот так можно :
typedef int arr5[5];

то есть логичнее на мой взгляд вот наподобие как студенческом паскале :
typedef int[5] arr5;
Это было бы логичнее, если бы переменные объявлялись как `int[5] arr5;`.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969088
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
andron81
то есть дело то может быть в синтаксисе . да, так нельзя :

typedef int[5] arr5;
а вот так можно :
typedef int arr5[5];

то есть логичнее на мой взгляд вот наподобие как студенческом паскале :
typedef int[5] arr5;
Это было бы логичнее, если бы переменные объявлялись как `int[5] arr5;`.

Собственно Страуструп в какой-то своей книге и писал, что очень недоволен синтаксисом Си. И даже приводил примеры объявлений переменных, которые синтаксически корректны, но откомпилировать их невозможно.

И про массивы он, кажется, как раз и писал что логичнее `int[5] arr5;`, но внедрить это невозможно.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969089
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest,

Да, разумеется

Но по каким-то причинам оформляется и тайпдеф и сама переменная как объявляется.
И кстати тогда можно было бы с уверенностью сказать, что int[5] это тип. Поэтому я склончюсь больше к идеи Сибирякова.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969090
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petrav
Собственно Страуструп в какой-то своей книге и писал, что очень недоволен синтаксисом Си. И даже приводил примеры объявлений переменных, которые синтаксически корректны, но откомпилировать их невозможно.
Это как?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969096
andron81
petrav,

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

чтобы было понятнее, лучше представлять любую переменную, как ячейку памяти, где лежит некий байт
a, b, data, var - всё это ячейки в памяти, которые нам (людям) проще читать словами, а компу конечно цифрой (адрес ячейки)
а когда нам нужен адрес ячейки, то мы его получаем через &var, а доступ к данным через *var
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969098
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
petrav
Собственно Страуструп в какой-то своей книге и писал, что очень недоволен синтаксисом Си. И даже приводил примеры объявлений переменных, которые синтаксически корректны, но откомпилировать их невозможно.
Это как?

Я точно не помню. Может я слегка перегнул палку, но Бьёрн приводил какие-то совершенно мозголомные примеры объявлений переменных... и там реально была жуткая путаница. И Страуструп как раз и писал, что хотел бы переделать систему типов Си, но не мог сделать этого. Кажется в книге "Дизайн и эволюция С++", но я точно не помню название.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969099
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот как это работает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#include <stdio.h>

int main() {
	int mat[3][5];

	for (int i = 0; i<3; i++) {
		for (int j=0; j<5; j++) {
			mat[i][j] = i*10 + j;
		}
	}

	int (*a)[5];
	a = mat;
	//a = &mat[0]; //works as well

	for (int i=0; i<3; i++) {
		for (int j = 0; j<5; j++) {
			printf("%4d ", *(*(a+i) +j) );
		}
		printf("\n");
	}
}


и я еще раз повторю, что нужно различать указатель на массив от массива указателей
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969105
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabprintf("%4d ", *(*(a+i) +j) );

А по-хорошему-то тут должно было бы быть "(*a)[j]" и дальше простое a++... Это если бы а
реально было указателем на массив из пяти целых чисел...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969106
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
верен любой из способов (поправила)

Код: plaintext
1.
arr[i][j] = (*(arr+i))[j] = *((*(arr+i))+j) = *(arr[i]+j)
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969110
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но увеличит ли операция а++ значение а на sizeof(int[5])?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969116
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
вот как это работает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#include <stdio.h>

int main() {
	int mat[3][5];

	for (int i = 0; i<3; i++) {
		for (int j=0; j<5; j++) {
			mat[i][j] = i*10 + j;
		}
	}

	int (*a)[5];
	a = mat;
	//a = &mat[0]; //works as well

	for (int i=0; i<3; i++) {
		for (int j = 0; j<5; j++) {
			printf("%4d ", *(*(a+i) +j) );
		}
		printf("\n");
	}
}


и я еще раз повторю, что нужно различать указатель на массив от массива указателей


Понимаете , глупая логика моя следующая :
int (*a)[5]; - это указатель на массив , содержащий "строку" из 5 целых чисел.
int f[5] - это "строка" из 5 целых чисел.

в башке четко отложилось, что f это указатель на первый элемент массива, а значит (возможно ошибочно), что это как раз и есть указатель на "строку" из 5 целых чисел.
поэтому я думал , что a=f наверно безошибочно.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969117
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я думаю тут имеет смысл говорить о перемещениях

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
#include <stdio.h>

int main() {
	int mat[3][5];

	for (int i = 0; i<3; i++) {
		for (int j=0; j<5; j++) {
			if (i==0 && j==0) {
				mat[i][j] = 111;
			}
			else {
				mat[i][j] = i*10 + j;
			}
		}
	}

	int (*a)[5];
	a = mat;
	//a = &mat[0]; //works as well


	for (int i=0; i<3; i++) {
		for (int j = 0; j<5; j++) {
			printf("%4d ", *( (*(a+i)) +j) );
		}
		printf("\n");
	}

	//Steps

	for (int i=0; i<3; i++) {
		printf("%p, %p\n", *(a++), mat[i]);
	}

	printf("Last element: %d\n", *((*(a-1)) + 4) );
}



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Output

 111    1    2    3    4 
  10   11   12   13   14 
  20   21   22   23   24 
0x7fff8a9891b0, 0x7fff8a9891b0
0x7fff8a9891c4, 0x7fff8a9891c4
0x7fff8a9891d8, 0x7fff8a9891d8
Last element: 24
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969119
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81


Понимаете , глупая логика моя следующая :
int (*a)[5]; - это указатель на массив , содержащий "строку" из 5 целых чисел.
int f[5] - это "строка" из 5 целых чисел.

в башке четко отложилось, что f это указатель на первый элемент массива, а значит (возможно ошибочно), что это как раз и есть указатель на "строку" из 5 целых чисел.
поэтому я думал , что a=f наверно безошибочно.


если говорить об адресации, то логика норм,
вы делаете ошибку в dereferencing (не знаю как перевести)
поэтому я выписала правила
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969122
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab

... dereferencing (не знаю как перевести)

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

вы делаете ошибку в dereferencing (не знаю как перевести)

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

поэтому я выписала правила

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

Код: plaintext
1.
arr[i][j] = (*(arr+i))[j] = *((*(arr+i))+j) = *(arr[i]+j)

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

Да ты пойми простую вещь. Есть тип. Неважно что это за тип: int, структура или массив. У тебя есть указатель на переменную этого типа. Понятно, что этот указатель по факту содержит указатель на первую переменную в этом типе. По факту! Но по сути он содержит указатель на этот тип. Точнее на переменную этого типа.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969233
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mini.weblab
вот как это работает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#include <stdio.h>

int main() {
	int mat[3][5];

	for (int i = 0; i<3; i++) {
		for (int j=0; j<5; j++) {
			mat[i][j] = i*10 + j;
		}
	}

	int (*a)[5];
	a = mat;
	//a = &mat[0]; //works as well

	for (int i=0; i<3; i++) {
		for (int j = 0; j<5; j++) {
			printf("%4d ", *(*(a+i) +j) );
		}
		printf("\n");
	}
}


и я еще раз повторю, что нужно различать указатель на массив от массива указателей
Вопрос на засыпку. А так можно?:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#include <stdio.h>

int main() {
	int mat[3][5];

	for (int i = 0; i<3; i++) {
		for (int j=0; j<5; j++) {
			mat[0][i*5 + j] = i*10 + j;
		}
	}

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

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


мне сложно понять простую вещь.
смотрите разбираем, что написал этот товарищ, (пишу его перефразированные цитаты жирным) :
пусть все же массив это тип. в чем у меня сомнения ну да ладно. пусть тип.
у меня есть указатель на переменную этого типа.

ок. съели.

этот указатель по факту содержит указатель на первую переменную в этом типе
вот это я с трудом, но понял. видимо имелось ввиду , что этот указатель на первый элемент массива.

но в то же время он является и указателем на int
и это понято . ведь массив это по сути совокупность переменных хранящихся рядом в памяти (благодаря этому доступна арифметика указателей)

так а где тут объяснение , что это не работает ?

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



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

Бывает.

andron81

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



здесь a это указатель на int ? указатель ! а f указатель на int , тоже указатель
почему не прокатывает это:
a = f;

Здесь "a" — это указатель на массив. А "f" — это массив.

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

Переменная типа массив может неявно привестись только к указателю на элемент массива и всё.


вот !

здесь нет это преобразования :

a = f;

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

Переменная типа массив может неявно привестись только к указателю на элемент массива и всё.


вот !

здесь нет это преобразования :

a = f;

???

Нет. Потому что `a` — это указатель на массив, а не на элемент этого массива.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969259
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81, посмотри пример под спойлером в этом сообщении 22136952 . Возможно станет чуточку понятней.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969263
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
andron81
пропущено...


вот !

здесь нет это преобразования :

a = f;

???

Нет. Потому что `a` — это указатель на массив, а не на элемент этого массива.



блин, да о каком элементе . о чем вы ? или я тупой или вы себе противоречите :
вот же вы писали :

Есть тип. Неважно что это за тип: int, структура или массив. У тебя есть указатель на переменную этого типа. Понятно, что этот указатель по факту содержит указатель на первую переменную в этом типе. По факту! Но по сути он содержит указатель на этот тип. Точнее на переменную этого типа.


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

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


так а где тут объяснение , что это не работает ?

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




дело в том, что вы не хотите воспринимать определения!
Определения:
указатель на массив - это указатель на массив, и он указывает на массив
указатель на целое число - это указатель на целое число, и он указывает на целое число

вместо того, чтобы просто взять и использовать определение, вы начинаете придумывать что-то свое:
здесь a это указатель на int ? указатель ! а f указатель на int , тоже указатель
почему не прокатывает это:
a = f;

нет не верно!
a - по определению, указатель на массив из целых чисел
f - по определению, указатель на целое число

вот поэтому и не прокатывает
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969289
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
Вопрос на засыпку. А так можно?:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#include <stdio.h>

int main() {
	int mat[3][5];

	for (int i = 0; i<3; i++) {
		for (int j=0; j<5; j++) {
			mat[0][i*5 + j] = i*10 + j;
		}
	}

	// дальше как было
}


1)
нет нельзя, но это личное мнение и с ним можно не соглашатся :-)
в данном случае код написан некорректно, и вводит в заблуждение тех, кто будет читать/разбирать этот код.
2)
в gcc все прекрасно откомпилируется и будут получены те же результаты
в данном случае я с gcc не согласна, но принимаю точку зрения разработчиков gcc
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969293
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OFF: Особенно злая шутка товарищей Кернигана и Риччи состоит в том, что выражение arr[i,j]
компилируется без ошибок и даже предупреждений, но, конечно же, не работает так, как
ожидает человек, видевший синтаксис Бейсика или Паскаля.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969297
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mini.weblab
a guest
Вопрос на засыпку. А так можно?:
1) нет нельзя, но это личное мнение
Я не про мнение спрашивал, а определено ли поведение с точки зрения стандарта. Пардон, если сразу было не ясно.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969298
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab

a - по определению, указатель на массив из целых чисел
f - по определению, указатель на целое число
вот поэтому и не прокатывает


в общем ещё раз пролистал тему адресная арифметика. нету там такого прикола как указатель на массив. это определение вводится позже. то есть f это указатель на какой-либо элемент массива(например на первый) ну и соответственно указатель на целое число.

Из чего делаю вывод , что указатель на массив и указатель на первый (или n-ый элемент) это разные понятия.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969302
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Из чего делаю вывод , что указатель на массив и указатель на первый (или n-ый элемент) это разные понятия.
Конечно разные!
И если ты посмотрел пример под спойлером в этом 22136952 комментарии, то должен был понять чем они отличаются, но фактически, указатель на массив и указатель на первый элемент массива, хоть и имеют разные типы, будут содержать один и тот же адрес, а следовательно, возможно явное приведение одного к другому.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969303
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mini.weblab
вместо того, чтобы просто взять и использовать определение, вы начинаете придумывать что-то свое:
здесь a это указатель на int ? указатель ! а f указатель на int , тоже указатель
почему не прокатывает это:
a = f;


нет не верно!
a - по определению, указатель на массив из целых чисел
f - по определению, указатель на целое числонет не верно!
a — указатель на массив, а f это выражение, обозначающее массив. Которое преобразуется к указателю на первый элемент обознчаемого массива.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969304
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev
указатель на массив и указатель на первый элемент массива, хоть и имеют разные типы, будут содержать один и тот же адрес
В цепепе это, кстати, не гарантируется.
Возможно, зря я про такое рассказываю. Сейчас понабегут 1C-ники, дельфисты и прочие программисты на HTML и начнётся такой хай...
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969306
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest, и "a" и "f" являются выражениями.
Выражение "a" (lvalue) будет расценено как указатель на массив, а выражение "f" (prvalue) будет расценено как ссылка на массив.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969307
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
mini.weblab

a - по определению, указатель на массив из целых чисел
f - по определению, указатель на целое число
вот поэтому и не прокатывает


в общем ещё раз пролистал тему адресная арифметика. нету там такого прикола как указатель на массив. это определение вводится позже. то есть f это указатель на какой-либо элемент массива(например на первый) ну и соответственно указатель на целое число.

Из чего делаю вывод , что указатель на массив и указатель на первый (или n-ый элемент) это разные понятия.

Забей, это тебе не нужно, учи Питон.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969309
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest

mini.weblabнет не верно!
a - по определению, указатель на массив из целых чисел
f - по определению, указатель на целое число


нет не верно!
a — указатель на массив, а f это выражение, обозначающее массив. Которое преобразуется к указателю на первый элемент обознчаемого массива.
в строке кода
a = f
f - это указатель на целое число
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969312
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
В цепепе это, кстати, не гарантируется.
Гарантируется!
Читай раздел "The C++ object model" до просветления.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969314
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev
Выражение "a" (lvalue) будет расценено
Запишись на курсы по английскому, расценивальщик.
rdb_dev
"f" (prvalue) будет расценено как ссылка на массив.
"f" не prvalue и не ссылка.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969319
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest, мне нет резона в который раз вступать в полемику с тем, что читает стандарт С++ исключительно по диагонали.
Просто оставлю тут пару ссылок:
1. 22136626
2. 6.10 Lvalues and rvalues
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969323
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev
a guest, мне нет резона в который раз вступать в полемику с тем, что читает стандарт С++ исключительно по диагонали.
Просто оставлю тут пару ссылок:
1. 22136626
2. 6.10 Lvalues and rvalues
ШУЕ, хватит кидаться в меня рандомными ссылками.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969329
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
Я не про мнение спрашивал, а определено ли поведение с точки зрения стандарта. Пардон, если сразу было не ясно.

нет не ясно:
1) если вам интересно, что написано в стандарте, то нужно прочитать, что там написано
2) если вам интересно, что я думаю, то нужно спросить у меня
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969331
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest, может ты не по англицки вообще не понимаешь или же просто не способен собрать единое представление из нескольких частей определения?

- A glvalue is an expression whose evaluation determines the identity of an object, bit-field, or function.
...
- An lvalue is a glvalue that is not an xvalue.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969332
mini.weblab
указатель на массив - это указатель на массив, и он указывает на массив
указатель на целое число - это указатель на целое число, и он указывает на целое число

может всё таки на ячейку памяти он указывает?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969338
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev
a guest
В цепепе это, кстати, не гарантируется.
Гарантируется!
Читай раздел "The C++ object model" до просветления.
Если ты не можешь прямо показать где гарантируется, лучше не пытайся спорить с известными фактами.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969339
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev
a guest, может ты не по англицки вообще не понимаешь
Я достаточно понимаю и по-русски и по-английски, а вот твой перевод "evaluated" как "оценивается" намекает на твою невменяемость, если ты серьёзно так переводишь.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969343
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза

может всё таки на ячейку памяти он указывает?

нет, указатель указывает на данные
(язык С - язык высокого уровня)
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969345
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest, я тебе ясно сказал - раздел "The C++ object model" . Дополнительно к нему рекомендую прочесть раздел "Expressions" в отношении "Subscripting" , а также раздел "Declarations" в отношении "Arrays" и как-то согласованно уложить это у себя в сознании.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969352
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
Я достаточно понимаю и по-русски и по-английски, а вот твой перевод "evaluated" как "оценивается" намекает на твою невменяемость, если ты серьёзно так переводишь.
Может ты, всё-таки, разуешь глаза? Где в данном тексте ты разглядел третью форму глагола evaluate?

- A glvalue is an expression whose evaluation determines the identity of an object, bit-field, or function.
...
- An lvalue is a glvalue that is not an xvalue.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969364
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev
a guest, я тебе ясно сказал - раздел "The C++ object model" . Дополнительно к нему рекомендую прочесть раздел "Expressions" в отношении "Subscripting" , а также раздел "Declarations" в отношении "Arrays" и как-то согласованно уложить это у себя в сознании.
Ещё раз: можешь показать на эту гарантию (явную или выводящуюся из чего-то другого)? А то пока ты просто забавно пытаешься спорить против известного и (частично) признанного (не?)бага в стандарте.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969366
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest, вот что тут может быть непонятно?

A postfix expression followed by an expression in square brackets is a postfix expression. One of the expressions shall be a glvalue of type “array of T” or a prvalue of type “pointer to T” and the other shall be a prvalue of unscoped enumeration or integral type. The result is of type “T”. The type “T” shall be a completely-defined object type. The expression E1[E2] is identical (by definition) to *((E1)+(E2)) , except that in the case of an array operand, the result is an lvalue if that operand is an lvalue and an xvalue otherwise. The expression E1 is sequenced before the expression E2.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969368
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev
a guest
Я достаточно понимаю и по-русски и по-английски, а вот твой перевод "evaluated" как "оценивается" намекает на твою невменяемость, если ты серьёзно так переводишь.
Может ты, всё-таки, разуешь глаза? Где в данном тексте ты разглядел третью форму глагола evaluate?
То, что ты не evaluated переводишь как "расценивается", а evaluation, это конечно кардинально меняет дело (нет).
(Я ещё твоё "расценивается" написал как "оценивается", удивлён, что ты до такого не докопался.)
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969379
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
Ещё раз: можешь показать на эту гарантию (явную или выводящуюся из чего-то другого)? А то пока ты просто забавно пытаешься спорить против известного и (частично) признанного (не?)бага в стандарте.

А что там за признанный не-баг в стандарте?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969381
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petrav
a guest
Ещё раз: можешь показать на эту гарантию (явную или выводящуюся из чего-то другого)? А то пока ты просто забавно пытаешься спорить против известного и (частично) признанного (не?)бага в стандарте.

А что там за признанный не-баг в стандарте?
22150942
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969385
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest, ты до сих пор не понял, что я нарочно использую слово "расценивается", чтобы сократить возможность двойного трактования слова "оценивается" и специально перевожу не дословно, стараясь следовать литературным нормам русского языка? Ты шо, нерусский?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969386
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
А что там за признанный не-баг в стандарте?
У него во всех местах стандарта баг, где его маня-мирок сталкивается с когнитивным диссонансом. Не обращай внимания!
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969394
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev
a guest, ты до сих пор не понял, что я нарочно использую слово "расценивается", чтобы сократить возможность двойного трактования слова "оценивается"
Слово "вычисляется", как все нормальные люди, ты, конечно, использовать не можешь.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969403
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
rdb_dev
a guest, ты до сих пор не понял, что я нарочно использую слово "расценивается", чтобы сократить возможность двойного трактования слова "оценивается"
Слово "вычисляется", как все нормальные люди, ты, конечно, использовать не можешь.

Кстати "evaluation" я бы тоже перевёл (в данном случае) как "вычисляется". Потому как, если мы говорим о языке программирования, то слова "расценивается" и "оценивается" как-то звучат не чётко и неоднозначно. Как будто мы оцениваем точность мат. модели погоды, например.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969421
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так. Прекращаем переходы на личности.

Кольцо власти жжот мне руку...
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969425
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
Слово "вычисляется", как все нормальные люди, ты, конечно, использовать не можешь.
Не могу!
Так как слово вычисляется, я, как правило, использую к выражениям, результатом которых является числовое значение, а не тип.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969457
mini.weblab
Алексей Роза

может всё таки на ячейку памяти он указывает?

нет, указатель указывает на данные
(язык С - язык высокого уровня)

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

что тогда с константами?
например вот
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#include <stdio.h>

int main() {
	const int test = 10;
	const int *ptest;
	ptest = &test;

	printf("%d, %p\n", test, ptest);
	return 0;
}

...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969474
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
Алексей Роза,
что тогда с константами?
Всё тоже самое. cv-квалификаторы лишь сообщают компилятору об особенностях работы с объектом.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969477
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev
выражениям, результатом которых является ... тип.
Маразм крепчал.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969490
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev, Алексей Роза
посмотрела: в С это называется объект (а не переменная)
зато так понятнее: указатель на массив - это указатель на массив, и он указывает на массив
указатель на целое число - это указатель на целое число, и он указывает на целое число
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969497
mini.weblab, надо вам с ассемблером немножко познакомиться, там уже совсем всё понятно становится.
указатель на массив, указатель на число, указатель на чар...
во1, это типы. На них никто не указывает.
во2, они все указывают на ячейку памяти. Только в случае массива там будет ещё и длина (кол-во ячеек).
в3, они все указывают на число, если уж на то пошло. Даже если тип - char.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969500
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
rdb_dev, Алексей Роза
посмотрела: в С это называется объект (а не переменная)
Да вы чо, блин, издеваетесь?!
22136952
"glvalue (generalized left-hand value) - выражение, которое расценивается как определяющее идентификацию объекта , битового поля или функции. Таким выражением может быть как lvalue, так и xvalue.
Ремарка: В стандарте C++ под объектом понимается не только экземпляр структуры или класса, но также экземпляр любого скалярного или пользовательского типа, включая экземпляр типа "массив" (array).
Проводя параллели с лексиконом программистов, результатом оценки выражения glvalue в C++ является переменная - именованная (меченная) непрерывная область памяти данных процесса, предназначенная для хранения типизированных данных, содержимое которой позволено изменять. К примеру, указатель (void*), как меченная непрерывная область памяти некоторого размера (DWORD для 32-разрадных или QWORD для 64-разрядных приложений), предназначенная для хранения данных типа (void*), является переменной, но область памяти на которую указывает хранящийся в этом указателе адрес не может расцениваться как переменная, так как нам ничего не известно о типе того, на что этот адрес указывает и вообще является ли это данными или кодом. В отношении указателя (void*) стандарт C++ говорит нам о том, что указатель типа (void*) указывает на объект неизвестного типа."


rdb_dev
mini.weblab
Алексей Роза,
что тогда с константами?
Всё тоже самое. cv-квалификаторы лишь сообщают компилятору об особенностях работы с объектом .
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969501
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза, самый кайф будет, когда девушка углубиться в тему виртуальных методов, чисто виртуальных методов, классов-интерфейсов и т.д. :) Там ещё придётся пояснять такие "нестандартные" вещи, как ABI.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969503
тут ещё можно добавить, что в асме (который, по сути, и есть язык, который понимает процессор) вообще нет типов
всё что там известно о переменной, это её размер.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969504
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей Роза
mini.weblab, надо вам с ассемблером немножко познакомиться, там уже совсем всё понятно становится.
указатель на массив, указатель на число, указатель на чар...
во1, это типы. На них никто не указывает.
Понятно, что имеются в виду объекты соответствующих типов.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969517
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза,
мы говорим про язык С
1.
в С есть объекты, функции и выражения (objects, functions, and expressions)
2.
и объекты, и функции, и выражения имеют тип (данных)
3.
указатель указывает на объект определенного типа.
например,
указатель на целое число, указывает на объект типа целое число
указатель на целочисленный массив указывает на объект типа целочисленный массив
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969553
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
rdb_dev
выражениям, результатом которых является ... тип.
Маразм крепчал.
Поясни - ты сейчас удивлён, что при компиляции результатом оценки выражения glvalue является тип? Я правильно тебя понял?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969580
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
тут ещё можно добавить, что в асме (который, по сути, и есть язык, который понимает процессор) вообще нет типов
всё что там известно о переменной, это её размер.
При использовании команд FPU, MMX, SSE и т.д. известен ещё и тип представления числа, но не все эти типы имеют эквивалент в C++.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969595
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
Алексей Роза
тут ещё можно добавить, что в асме (который, по сути, и есть язык, который понимает процессор) вообще нет типов
всё что там известно о переменной, это её размер.
При использовании команд FPU, MMX, SSE и т.д. известен ещё и тип представления числа, но не все эти типы имеют эквивалент в C++.

Я-бы сказал что в Ассемблере известен тип регистра в который будет загружена сырая память.

Но это настолько далеко от С++ и современных ЯП что мне вообще непонятно зачем мы втащили
сюда Ассемблер. Что мы этим сможем доказать - непонятно.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969623
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev, добрые дяди в белых халатах тебе всё тебе пояснят про текущие расценки на выражения, результатом которых являются типы.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969665
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest, иными словами, ты слился? Ну, Ok...
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969707
mayton
rdb_dev
пропущено...
При использовании команд FPU, MMX, SSE и т.д. известен ещё и тип представления числа, но не все эти типы имеют эквивалент в C++.

Я-бы сказал что в Ассемблере известен тип регистра в который будет загружена сырая память.

Но это настолько далеко от С++ и современных ЯП что мне вообще непонятно зачем мы втащили
сюда Ассемблер. Что мы этим сможем доказать - непонятно.

затем, что мы можем судить о том, как именно работают указатели, только по скомпилированному коду.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969726
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей Роза
затем, что мы можем судить о том, как именно работают указатели, только по скомпилированному коду.
Кто "мы"?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969732
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
mayton
пропущено...

Я-бы сказал что в Ассемблере известен тип регистра в который будет загружена сырая память.

Но это настолько далеко от С++ и современных ЯП что мне вообще непонятно зачем мы втащили
сюда Ассемблер. Что мы этим сможем доказать - непонятно.

затем, что мы можем судить о том, как именно работают указатели, только по скомпилированному коду.

Ммм... это просто частный случай. Компиллятор под x86 соберет один код а ARM соберет другой.

Мы не можем рассматривать бинарник как доказательство конепций компиллятора.

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

Да я этим не занимаюсь никогда. Если мне надо проверить - я пишу модульный тест.

Я не разбираю компиллятор на атомы. Мы же в форуме - прикладные разработчики? Верно?

Или среди вас есть те кто хотят свои компилляторы создавать?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969753
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Алексей Роза
и как вы предлагаете искать, куда там указатель указал?

Да я этим не занимаюсь никогда. Если мне надо проверить - я пишу модульный тест.

Я не разбираю компиллятор на атомы. Мы же в форуме - прикладные разработчики? Верно?

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

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

Тоесть мы должны открыть стандарт где описывается хотя-бы обобщённыей синтаксический шаблон
и просто перевести его на русский язык.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969810
ладно, зайдём с другой стороны...
разве асм не даст нам ответа на вопрос "указатель на массив, что это такое" ?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969813
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей Роза
ладно, зайдём с другой стороны...
разве асм не даст нам ответа на вопрос "указатель на массив, что это такое" ?
Кому "нам"?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969815
mini.weblab
указатель указывает на объект определенного типа.

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

Нет, не даст. У него все указатели это void*.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969820
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
ладно, зайдём с другой стороны...
разве асм не даст нам ответа на вопрос "указатель на массив, что это такое" ?

В Clang какой Asm? Там - еще один уровень абстракций.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969827
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, LLVM использует собственный ассемблер - платформонезависимый. После, подобно ГНУСу, оптимизирует, компилирует в псевдокод и транслирует в платформозависимый бинарный образ. Как-то так, если мне не изменяет память.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969830
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей Роза, угомонись с ассемблером уже плз.
http://port70.net/~nsz/c/c11/n1570.html#6.2.5p20 Any number of derived types can be constructed from the object and function types, as follows:
...
— A pointer type may be derived from a function type or an object type, called the referenced type. A pointer type describes an object whose value provides a reference to an entity of the referenced type . A pointer type derived from the referenced type T is sometimes called ''pointer to T ''. The construction of a pointer type from a referenced type is called ''pointer type derivation''. A pointer type is a complete object type.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969833
теперь ещё новое понятие появилось "тип указателя"...
на простом и понятном языке всё объяснено на 100500 экранах.
стало намного легче.
они говорят, что данные на самом деле хранятся внутри объекта (который type)?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969834
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
mayton, LLVM использует собственный ассемблер - платформонезависимый. После, подобно ГНУСу, оптимизирует, компилирует в псевдокод и транслирует в платформозависимый бинарный образ. Как-то так, если мне не изменяет память.

Правильно. Яж про это и говорю. В 70-е С и С++ создавались с целью - вытеснить
ассемблер. Цель достигнута. Но на этом не остановились. Целевой бинарный код
тоже дорого стоит и его разделили на уровни. Теперь С++, Haskel, Rust, Scala
(и возможно уже некоторые браузерные JavaScript машинки) умеют
продуцировать LLVM который на выходе выдаст целевой ассемблер.

(В скобках замечу - выдающий потрясающую производительность. Почти не
уступающую классическому подходу. И бенчмарк где-то есть)


Таким образом количество абстракций которые проброшены между массивов
и целевым бинарным кодом стало еще на 1 больше.

Наблюдая такой тренд я могу утверждать что С++(Clang ) самоустранился от конкретики
ассемблера. Ему ассемблер уже не нужен чтобы решить задачу.

Так зачем мы в качестве доказательства приводим этот далеко не первый уровень
артифактов?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969836
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Правильно. Яж про это и говорю. В 70-е С и С++ создавались с целью - вытеснить
ассемблер. Цель достигнута. Но на этом не остановились. Целевой бинарный код
тоже дорого стоит и его разделили на уровни. Теперь С++, Haskel, Rust, Scala
(и возможно уже некоторые браузерные JavaScript машинки) умеют
продуцировать LLVM который на выходе выдаст целевой ассемблер.
Именно так! ВКонтакте даже использует свой PHP-frontend LLVM'а.

mayton
Наблюдая такой тренд я могу утверждать что С++(Clang ) самоустранился от конкретики
ассемблера. Ему ассемблер уже не нужен чтобы решить задачу.
И тем не менее, добавленная абстракция, это, всё-таки, ассемблер, хоть и платформонезависимый и все фронтэнды LLVM'а используют именно мнемонику этого ассемблера.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969841
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наш вопрос топика - теоретический.

Представте что мы с вами доказываем теорему Пифагора.

И в качестве доказательсва Алексей Роза берет рисует
треугольники и меряет их линейкой с погрешностью
и потом перемножает и складывает чтоб доказать что
формула Пифагора близка.

Такой... подход физика-экспериментатора.

Я не знаю. Мне такой подход не нравится. Он - не с той стороны.

Он к спецификации языка вообще не имеет отношения.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969856
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы, господа, вообще зря вводите понятие "указатель на массив". Потому как этот указатель ничем не отличается от указателя на int, например, или на структуру. Но введение такого понятия у людей (со слабой морально-политической подготовкой) совсем сносит крышу и всё путает в голове. Приводит к попыткам придумывать какие-то совершенно лишние теории и псевдо-логические конструкции.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969858
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petrav
Вы, господа, вообще зря вводите понятие "указатель на массив". Потому как этот указатель ничем не отличается от указателя на int, например, или на структуру.
Отличается типом.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969859
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
petrav
Вы, господа, вообще зря вводите понятие "указатель на массив". Потому как этот указатель ничем не отличается от указателя на int, например, или на структуру.
Отличается типом.

Типом конечно. Указатели на массив, структуру, int и char отличаются только типом на который указывают. Но смысл и назначение одинаковые.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969866
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Наш вопрос топика - теоретический.

Представте что мы с вами доказываем теорему Пифагора.

И в качестве доказательсва Алексей Роза берет рисует
треугольники и меряет их линейкой с погрешностью
и потом перемножает и складывает чтоб доказать что
формула Пифагора близка.

Такой... подход физика-экспериментатора.

Я не знаю. Мне такой подход не нравится.
То тебе не нравится когда в стандарт лазают (насколько я помню), то когда не лазают.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969874
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
mayton
Наш вопрос топика - теоретический.

Представте что мы с вами доказываем теорему Пифагора.

И в качестве доказательсва Алексей Роза берет рисует
треугольники и меряет их линейкой с погрешностью
и потом перемножает и складывает чтоб доказать что
формула Пифагора близка.

Такой... подход физика-экспериментатора.

Я не знаю. Мне такой подход не нравится.
То тебе не нравится когда в стандарт лазают (насколько я помню), то когда не лазают.

Мы уже 5 страниц занимаемя анонизмом простого вопроса.

Если его можно прекратить простой ссылкой на док - то прошу тех кто знает
- дайте ссылку и мы закроем эту тему.

Для меня вопрос выеденного яйца не стоит. Тоетсь я не понимаю почему Сишники должны 5 страниц
ломать копья вокруг пустяка. Дайте тестовый кейс и мы его проверим. Это подход практики.
И я всегда так и делаю. Но здесь нет этого кейса. Здесь автор ковыряет грязь из пупка.
Или между пальцев ног. Зачем? Какой повод?

И я уже согласен зайти в теорию просто чтобы это прекратить.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969878
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
a guest
пропущено...
То тебе не нравится когда в стандарт лазают (насколько я помню), то когда не лазают.

Мы уже 5 страниц занимаемя анонизмом простого вопроса.

Если его можно прекратить простой ссылкой на док - то прошу тех кто знает
- дайте ссылку и мы закроем эту тему.

Для меня вопрос выеденного яйца не стоит.
Указатель на массив это указатель на массив. Full stop.
mayton
Тоетсь я не понимаю почему Сишники должны 5 страниц ломать копья вокруг пустяка.
Если бы тут были только сишники, то, я думаю, копья особо бы не ломались. Но понабижали асучиватели складов и шизики и пишут всякую херню.
mayton
Дайте тестовый кейс и мы его проверим.
Как должен выглядить тестовый кейс, отвечающий на вопрос "что такое указатель на массив"?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969881
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest

Как должен выглядить тестовый кейс, отвечающий на вопрос "что такое указатель на массив"?

Это очень правильный вопрос. Я добавлю. Зачем нам вообще обсуждать тему для которой
программист не может придумать кейса.

Это знаете как ребенку объяснить сложное явление на пальцах. Если мы можем объяснить - то сами
понимаем. И эта сущность имеет смысл в нашем материальном мире.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969882
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
a guest

Как должен выглядить тестовый кейс, отвечающий на вопрос "что такое указатель на массив"?

Это очень правильный вопрос. Я добавлю. Зачем нам вообще обсуждать тему для которой
программист не может придумать кейса.
Похоже, у тебя профдеформация тестера.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969883
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
mayton
пропущено...

Это очень правильный вопрос. Я добавлю. Зачем нам вообще обсуждать тему для которой
программист не может придумать кейса.
Похоже, у тебя профдеформация тестера.

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

Он должен включать в себя переменную, которая демонстрирует все свойства указателя на
нечто, соответствующее массиву. Как минимум в части операторов ++, -- и * и так далее (на
случай если я пропустил какой-то оператор, применимый к "чистому" указателю, то бишь без
предварительных неявных преобразований).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969886
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Типом конечно. Указатели на массив, структуру, int и char отличаются только типом на который указывают. Но смысл и назначение одинаковые.
Нет.
sizeof(*указатель_на_массив) даст размер массива в байтах, а sizeof(*указатель_на_int) вернёт размер int.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969891
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, тут всё просто!
Оператор ++ к указателю на массив увеличит указатель на размер массива, а к указателю на int увеличит указатель на размер int.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969892
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav
Типом конечно. Указатели на массив, структуру, int и char отличаются только типом на который указывают. Но смысл и назначение одинаковые.
Нет.
sizeof(*указатель_на_массив) даст размер массива в байтах, а sizeof(*указатель_на_int) вернёт размер int.

Вы это специально что ли пишите? Вот эту вот ерунду?! Или вы в натуре не понимаете, что разыменование указателя просто приводит к типу на который указывает этот указатель? То что вы привели в качестве примеров по сути одинаковое. Это указатели на некий тип.

Почему вы обсуждаете понятие "указатель на массив", но не обсуждаете понятие "указатель на int"?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969895
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, потому что обсуждать размер указателя глупо, так как он всегда один и тот же, независимо от типа объекта, на который он указывает. Исключение может составлять только указатель на виртуальный метод в зависимости от реализации C++.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969896
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devтут всё просто!
Оператор ++ к указателю на массив увеличит указатель на размер массива
Вот именно. Если в показанном примере это наблюдается, то да - это указатель на массив. Не
наблюдается - какая-то фигня.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969900
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav, потому что обсуждать размер указателя глупо, так как он всегда один и тот же, независимо от типа объекта, на который он указывает. Исключение может составлять только указатель на виртуальный метод в зависимости от реализации C++.

А зачем вы обсуждаете размер указателя? Это что блин такое открытие что sizeof(*указатель) может вернуть разные значения?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969937
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, тогда уточни - что именно ты хочешь обсудить про указатели.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969984
a guest
Указатель на массив это указатель на массив. Full stop.

да щас, stop. Там уже была тема на неск.страниц, где обсуждали, что же это за зверь - указатель на массив...
а воз и ныне там
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969989
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сделаю 1 эксперимент. Маленький сорс.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#include <stdio.h>
//#include <vector>

//using namespace std;

int main(int argc, char **argv, char **env) {
  //vector<int> q{ 13, 17, 19 };
  int x[] = { 2,3,5,7,11 };
  int *y = new int[6];
  int *z = y;
  int *w = y + 1;
  int (*a)[5];
  int* b;
  printf("OK!");
  delete[] y;
  return 0;
}



И его вид с точки зрения ассемблера для GCC/Linux (там операнды перевернуты местами - это норм. Вот такой он странный)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
	.file	"massiv.cpp"
	.text
	.section	.rodata
.LC0:
	.string	"OK!"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$96, %rsp
	movl	%edi, -68(%rbp)
	movq	%rsi, -80(%rbp)
	movq	%rdx, -88(%rbp)
	movq	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	movl	$2, -32(%rbp)
	movl	$3, -28(%rbp)
	movl	$5, -24(%rbp)
	movl	$7, -20(%rbp)
	movl	$11, -16(%rbp)
	movl	$24, %edi
	call	_Znam@PLT
	movq	%rax, -56(%rbp)
	movq	-56(%rbp), %rax
	movq	%rax, -48(%rbp)
	movq	-56(%rbp), %rax
	addq	$4, %rax
	movq	%rax, -40(%rbp)
	leaq	.LC0(%rip), %rdi
	movl	$0, %eax
	call	printf@PLT
	cmpq	$0, -56(%rbp)
	je	.L2
	movq	-56(%rbp), %rax
	movq	%rax, %rdi
	call	_ZdaPv@PLT
.L2:
	movl	$0, %eax
	movq	-8(%rbp), %rcx
	xorq	%fs:40, %rcx
	je	.L4
	call	__stack_chk_fail@PLT
.L4:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0"
	.section	.note.GNU-stack,"",@progbits



И его вид с точки зрения ассемблера для Low Level Virtual Machine (компиллятор Clang).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
; ModuleID = 'massiv.cpp'
source_filename = "massiv.cpp"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

@_ZZ4mainE1x = private unnamed_addr constant [5 x i32] [i32 2, i32 3, i32 5, i32 7, i32 11], align 16
@.str = private unnamed_addr constant [4 x i8] c"OK!\00", align 1

; Function Attrs: noinline norecurse optnone uwtable
define i32 @main(i32, i8**, i8**) #0 {
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i8**, align 8
  %7 = alloca i8**, align 8
  %8 = alloca [5 x i32], align 16
  %9 = alloca i32*, align 8
  %10 = alloca i32*, align 8
  %11 = alloca i32*, align 8
  %12 = alloca [5 x i32]*, align 8
  %13 = alloca i32*, align 8
  store i32 0, i32* %4, align 4
  store i32 %0, i32* %5, align 4
  store i8** %1, i8*** %6, align 8
  store i8** %2, i8*** %7, align 8
  %14 = bitcast [5 x i32]* %8 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* bitcast ([5 x i32]* @_ZZ4mainE1x to i8*), i64 20, i32 16, i1 false)
  %15 = call i8* @_Znam(i64 24) #5
  %16 = bitcast i8* %15 to i32*
  store i32* %16, i32** %9, align 8
  %17 = load i32*, i32** %9, align 8
  store i32* %17, i32** %10, align 8
  %18 = load i32*, i32** %9, align 8
  %19 = getelementptr inbounds i32, i32* %18, i64 1
  store i32* %19, i32** %11, align 8
  %20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0))
  %21 = load i32*, i32** %9, align 8
  %22 = icmp eq i32* %21, null
  br i1 %22, label %25, label %23

; <label>:23:                                     ; preds = %3
  %24 = bitcast i32* %21 to i8*
  call void @_ZdaPv(i8* %24) #6
  br label %25

; <label>:25:                                     ; preds = %23, %3
  ret i32 0
}

; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #1

; Function Attrs: nobuiltin
declare noalias i8* @_Znam(i64) #2

declare i32 @printf(i8*, ...) #3

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(i8*) #4

attributes #0 = { noinline norecurse optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { argmemonly nounwind }
attributes #2 = { nobuiltin "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #3 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #4 = { nobuiltin nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #5 = { builtin }
attributes #6 = { builtin nounwind }

!llvm.module.flags = !{!0}
!llvm.ident = !{!1}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{!"clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)"}



Если откомментарить STL-шные шаблоны то ассемблерный output опухает в 30 раз. И смотреть его становится очень тяжело.

Пока никак не комментирую его содержимое. Просто смотрю.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969991
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton, godbolt-ом не пользуешься?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969992
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. А надо?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969993
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton, возможно
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39969994
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну мячик на твоей стороне сейчас. Давай публикой еще больше дизассемблеров. Поищем там типизацию.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39970015
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
mayton, godbolt-ом не пользуешься?
Кому нужно это тупое г..но, которое не только не в курсе настроек оптимизации, но даже не понимает соглашения вызова? Разве, что чисто-теоретикам...

Все нормальные, пользующие ГНУС программисты для таких целей применяют параметр компилятора "-S" или используют соответствующий режим отладчика.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39970034
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
И его вид с точки зрения ассемблера для GCC/Linux (там операнды перевернуты местами - это норм. Вот такой он странный)
AT&T нотация
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39970056
10:20
YouTube Video
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39970161
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте подводить неутешительные итоги.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39970162
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81, у тебя еще остались вопросы которые ты не закрыл?
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39970552
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Это очень правильный вопрос. Я добавлю. Зачем нам вообще обсуждать тему для которой
программист не может придумать кейса.
С вариантом теста проблем нет
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
int main(int argc, char** argv)
{
  typedef int ArrayOfInt[16];

  ArrayOfInt arr[8] = {{0}};

  constexpr size_t
      out_i = sizeof(arr) / sizeof(ArrayOfInt),
      out_j = sizeof(ArrayOfInt) / sizeof(int),
      out_f = sizeof(arr) / sizeof(int);

  printf("\r\nout_i: %zu\r\nout_j: %zu\r\n", out_i, out_j);

  ArrayOfInt
      *a = arr,
      *out_a = a + out_i;
  int t = 1000;
  while (a < out_a)
  {
    for (size_t j = 0; j < out_j; j++)
      (*a)[j] = t + j + 1;
    a++;
    t += 1000;
  }
  
  int *e = arr[0];
  for (size_t f = 0; f < out_f; f++)
    printf("%i,", e[f]);

  return 0;
}

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

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


я понял, что указатель на массив это не одно и тоже что указатель на первый его элемент. если я верно понял, то мне этого пока достаточно.
...
Рейтинг: 0 / 0
указатель на массив. что это такое ?
    #39972728
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Я этот топик закрою.
...
Рейтинг: 0 / 0
158 сообщений из 158, показаны все 7 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / указатель на массив. что это такое ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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