Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/34: Рейтинг темы: голосов - 34, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 27.09.2023
Сообщений: 45

Можно ли сделать указатель на весь массив?

12.10.2023, 23:20. Показов 7460. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли сделать указатель на весь массив?
типо если делать так *ptr =arr, то указывает только на 1 элемент
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.10.2023, 23:20
Ответы с готовыми решениями:

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив)
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая как параметр получает указатель на...

Можно ли, используя указатель, а не указатель на указатель, обработать все элементы двумерного массива?
Можно ли, используя указатель, а не указатель на указатель, обработать все элементы двумерного массива?

Как можно передать в метод репорта весь массив данных?
С недавних пор начал работать с Reporting Services. Даже не знаю к какому разделу форума отнести вопрос на эту тему. Если кто работал...

46
1519 / 534 / 78
Регистрация: 22.09.2023
Сообщений: 1,699
14.10.2023, 19:30
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ValeryS Посмотреть сообщение
а первый массив это что? уж не элемент ли второго массива?
Что от этого меняется? ptr перестает быть указателем на массив?
Цитата Сообщение от ValeryS Посмотреть сообщение
казуистика. следующий массив это что?
Это следующий объект типа array (int[10]).
Цитата Сообщение от ValeryS Посмотреть сообщение
чем тогда отличается
Ничем. Указатель на массив - такой же указатель, как указатель на int, только на массив.
Цитата Сообщение от ValeryS Посмотреть сообщение
ptr это указатель?
а мы говорим о массивах
Мы говорим об указателях на массивы (см. заголовок темы). В этом смысле (с точки зрения указателя и работы с ним) массив ничем не отличается от int.

Цитата Сообщение от ValeryS Посмотреть сообщение
(вделено мной)
Именно. Массив - это не указатель. Массив - такой же объект, как и int или struct. И увеличив указатель на любой из элементов массива таких объектов на 1 можно перейти к следующему элементу. Никаких противоречий.
Цитата Сообщение от stake-k26 Посмотреть сообщение
на мой взгляд то, что вам приходится постоянно использовать ущербные конструкции,
Проблема в том, что вы считаете эти конструкции "ущербными". Предположу, что по причине того, что, как в известном анекдоте, просто "не умеете их готовить" и не готовы это признать.
Цитата Сообщение от stake-k26 Посмотреть сообщение
Может, вам стоит рассмотреть вопрос перехода на другой ЯП, в котором больше синтаксического сахара? Тот же с++, к примеру?
Вы не поверите - я пишу как раз на C++ и там тоже по мере необходимости использую указатели на массивы.
Цитата Сообщение от stake-k26 Посмотреть сообщение
Однако это исключительно ваши проблемы и меня едва ли касаются.
Конечно, вас они не касаются. И это не проблемы, просто возникающие передо мной задачи легко решаются указателями на массив. Именно поэтому "приходится" - потому что задачи такие, что любые другие варианты решения, кроме указателя на массив - это закат Солнца вручную (лишняя писанина, чреватая глупыми ошибками). И я, в отличие от вас, не вижу никаких сложности в применении указателя на массив, как наиболее подходящего инструмента для решения конкретной задачи.
Но и автора темы не должны касаться ваши проблемы непонимания указателей на массивы, вы не находите?
0
фрилансер
 Аватар для Алексей1153
6508 / 5758 / 1135
Регистрация: 11.10.2019
Сообщений: 15,406
14.10.2023, 19:40
Цитата Сообщение от stake-k26 Посмотреть сообщение
и тут мы приходим к структурам
в том числе, в структуре можно сделать поле-массив, что ещё более упростит передачу объекта в функцию Только речь шла о голом массиве.

Цитата Сообщение от stake-k26 Посмотреть сообщение
А уж про потерю производительности.. нет. тут я просто молчу. Давно уже не времена 8086-ых
это всё до сих пор актуально

Цитата Сообщение от stake-k26 Посмотреть сообщение
я придерживаюсь принципа "не хочешь терять производительность, пиши на ассемблере"
на C и C++ можно писать так же эффективно, как на ассемблере. Они для этого задумывались. Скажу больше, у компилятора для ассемблера нет оптимизатора, а человек не умеет оптимизировать достаточно эффективно. Оптимизатор компилятора C++ (и C тоже, наверное) умеет очень многое, что не сумеет человек даже в принципе

Цитата Сообщение от ValeryS Посмотреть сообщение
Перейти к следующему путем увеличения указателя на 1.
про отдельно использующийся массив - тут да, нет смысла сдвигать указатель, будет UB. А вот для массива массивов это сработает отлично
0
2493 / 1157 / 709
Регистрация: 25.04.2016
Сообщений: 3,339
14.10.2023, 20:25
Цитата Сообщение от Dushevny Посмотреть сообщение
я пишу как раз на C++
Золотце, а что ты забыло в ветке чистого си? Можно спросить?

Если ты используешь с++, там вообще никаких проблем с передачей массива нет. Так о чем тогда вообще речь? Или ты на столько выдающийся деятель, что не используешь инструменты с++, а вместо этого пишешь через malloc и прочие прелести чистого си?

Не по теме:

Так вот в чем дело, похоже ты и про структуры данных ничего не слышал, вот и вынужден мучиться с указателями на массив.. эх, ну ничего, посидишь в интернете еще лет 10, там может и про классы в с++ узнаешь, и откроется для тебя чудесный дивный мир, где никакие указателя на массивы даром не нужны.



Добавлено через 4 минуты
Цитата Сообщение от Алексей1153 Посмотреть сообщение
в структуре можно сделать поле-массив, что ещё более упростит передачу объекта в функцию
я только этот вариант и рассматриваю, как единственно возможный, все остальное - это что-то кособокое и недоразвитое с кучей минусов, а тут разом передал всю информацию и никаких костылей и распрыжек на ходулях с факелами не нужно.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
14.10.2023, 21:06
Цитата Сообщение от Dushevny Посмотреть сообщение
Мы говорим об указателях на массивы
Мы(по крайней мере я) говорим о массивах.
Цитата Сообщение от Dushevny Посмотреть сообщение
(см. заголовок темы).
ТС уже получил ответ в первых строках
Я же вступил в дискуссию чтобы сообщить что массивы в Си ущербны, по сравнению с тем же Фортраном.

Цитата Сообщение от ValeryS Посмотреть сообщение
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Сферический конь в вакууме, короче, это имя.. Или имя массива это ВЕСЬ массив? А если неизвестно где он кончается?.. Не продумали, так и пошло..
Да не продумали они эти K&R
придумали гомогенные данные и обозвали это массивом Массивы которые есть хотя бы у Фортрана, где все это?
Где хотя бы срезы?
Поторопились сделали как бы, ну мощности вычислительные не такие были а нужен был "Высокоуровневый ассемблер". А потом прижилось
В С++ что то похожее на массив пытаются сделать
здесь уже пошла подмена понятий
Цитата Сообщение от Dushevny Посмотреть сообщение
sizeof(имя_массива) != sizeof(указатель). Все, вам не плевать.
в 32х битной архитектуре
C
1
2
char arr[4];
char * ptr=&arr[0];
sizeof(arr) == sizeof(ptr) поразительно
Все аргумент не действует

Цитата Сообщение от Dushevny Посмотреть сообщение
Увы, со стандартом именно "его надо брать на веру".
какой из них? сколько редакций уже выпушено?
0
1519 / 534 / 78
Регистрация: 22.09.2023
Сообщений: 1,699
14.10.2023, 22:36
Цитата Сообщение от stake-k26 Посмотреть сообщение
Золотце, а что ты забыло в ветке чистого си? Можно спросить?
Во-первых, я с вами на брудершафт не пил и попрошу мне не "тыкать".
Во-вторых, не вам решать, в какие темы мне писать.
И в-третьих, в части указателей на массивы языки C и C++ совпадают, поэтому не вижу препятствий поделиться своими знаниями в этой ветке форума.
Цитата Сообщение от ValeryS Посмотреть сообщение
какой из них? сколько редакций уже выпушено?
Тот, который используется при сборке конкретного проекта.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
15.10.2023, 00:17
Цитата Сообщение от ValeryS Посмотреть сообщение
Все аргумент не действует
Нужно было добавить "в общем случае". Тогда равенство в частном случае никак не отменит неравенство в общем.

Цитата Сообщение от ValeryS Посмотреть сообщение
Я же вступил в дискуссию чтобы сообщить что массивы в Си ущербны, по сравнению с тем же Фортраном.
Но этот никак не отменяет его объектность. Свойства объекта задаются свойствами его типа. В данном случае да, у нас имеется такой тип, который запрещает копирование. Это - его свойство. Плохое ли, хорошее ли, но свойство.
В С++ мы можем сделать такой тип искусственно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
template <typename T, size_t N>
class Array {
public:
    Array(Array const&) = delete; // нельзя копировать
    
    operator T*() { // можно неявно приводить к указателю
       return &val[0];
    }
 
private:
    T val[N;]
};
Таким образом очень просто повторить встроенные свойства массивов в собственной объектной модели. Array<int, 10> a; тоже недообъект? Но мы ведь специально сделали ему такие свойства.
Кстати в том же C++ довольно много сделано, чтобы у вольных трактовщиков стандарта оставалось как можно меньше работы. Например мы можем сделать так:
C++
1
bool v = std::is_object<int[10]>::value; // int[10] - это тип "массив из 10 int"
И мы гарантированно получим v == true. В Си конечно нет таких наглядных метасредств для визуализации спецификации языка, поэтому придется со всей ответственностью смотреть стандарт "глазами".

Цитата Сообщение от ValeryS Посмотреть сообщение
мало читать нужно понимать.
Это как раз самое важное, что, как мне кажется, вы проигнорировали, - термин "объект" введен спецификацией языка для обозначения конкретных языковых возможностей, а вы в него вкладываете что-то свое ("недообъект", т.е. видимо есть какой-то "эталонный объект, который будет не недо-" и это вот сравнение с Фортраном), и на основании этого спорите. Мне кажется конструктивного разговора так не получится. Если нужна продуктивная дискуссия, а не спор ради спора, то лучше попытаться понять о чем именно говорит оппонент и возражать в этом контексте, а не задавать свой.

Добавлено через 19 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
покаж
Я покажу:
C
1
2
3
4
5
6
7
8
9
int a[2][10] = ...;
 
int(*p)[10] = a;
 
*p; // первый массив int[10]
 
p += 1;
 
*p; // второй массив int[10]
О, вижу уже был такой пример. И там вы возразили:
Цитата Сообщение от ValeryS Посмотреть сообщение
чем тогда отличается
C
1
2
3
int a[5];
int * ptr=a;
ptr++;
Вот именно, что ничем.

Что int - объект (и можно используя адресную арифметику ходить по этим объектам внутри разрешенной для этого памяти), что int[10] - объект, который точно также адресуется. Разница только в типе и задаваемых им свойствах.
Кстати, упомянутые операции сложение, вычитание и т.д. - это тоже свойства типа. Ничего удивительного в том, что у разных типов разные свойства, - нет. В этом и суть любой объектной модели.
3
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12844 / 7593 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
15.10.2023, 16:44
Цитата Сообщение от stake-k26 Посмотреть сообщение
за все время, сколько я пишу на си, ни разу не доводилось применять эту замечательную, но совершенно бесполезную конструкцию.
Иногда это и в правду удобно. Вот рядом тема лежит, там такая конструкция мне вполне уместной показалась...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.10.2023, 16:44

Можно ли сделать приложение для Android с Activity не во весь экран, а вроде окна на Windows?
Android 2.3. Рута нет и не планируется. Можно, чтобы это была не активность, а какой-то супер низкоуровневый, и пусть даже...

Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив.
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++. Условие:Реализовать 3 функции, каждая из которых принимает указатель на...

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

Как сделать указатель на массив
Здрасти. Как мне сделать указатель на массив: string stud= {{&quot;49000&quot;, &quot;Eddy&quot;, &quot;Vedder&quot;, &quot;dzienne&quot;, &quot;19&quot;}, ...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
47
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru