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

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

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

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

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

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

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

46
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
14.10.2023, 10:05
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Алексей1153 Посмотреть сообщение
массив - это объект
звучит красиво, а что такое объект? что с ним можно сделать?
0
1520 / 535 / 79
Регистрация: 22.09.2023
Сообщений: 1,704
14.10.2023, 10:18
Цитата Сообщение от stake-k26 Посмотреть сообщение
До тех пор, пока я могу работать с именем массива, как с указателем, мне плевать чем он является на самом деле.
sizeof(имя_массива) != sizeof(указатель). Все, вам не плевать.

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
а что такое объект? что с ним можно сделать?
Перейти к следующему путем увеличения указателя на 1.

Добавлено через 5 минут
Цитата Сообщение от stake-k26 Посмотреть сообщение
Те же яйца, только в профиль, не важно как именно это назвать.
Нет, важно. Если вы не осилили даже терминологию - говорить о нюансах преждевременно (см. эффект Даннинга-Крюгера)
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
14.10.2023, 10:35
Цитата Сообщение от Dushevny Посмотреть сообщение
Перейти к следующему путем увеличения указателя на 1.
есть ли в языке другие объекты? Если есть возможно ли таким путем перейти к другому объекту?
0
1520 / 535 / 79
Регистрация: 22.09.2023
Сообщений: 1,704
14.10.2023, 10:41
Цитата Сообщение от ValeryS Посмотреть сообщение
есть ли в языке другие объекты?
Да.
Цитата Сообщение от ValeryS Посмотреть сообщение
Если есть возможно ли таким путем перейти к другому объекту?
Да.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
14.10.2023, 10:49
Цитата Сообщение от Dushevny Посмотреть сообщение
Да.
Очень содержательно Перечисли их.
0
1520 / 535 / 79
Регистрация: 22.09.2023
Сообщений: 1,704
14.10.2023, 11:22
Цитата Сообщение от ValeryS Посмотреть сообщение
Перечисли их.
Нет. Откройте стандарт языка, нажмите Ctrl-F, введите "object", читайте. Вот пример:

Чтение документации из интернета вслух только за деньги, извините.
P.S. И не припомню, чтобы пил с вами на брудершафт.

С той же страницы:
0
2493 / 1157 / 709
Регистрация: 25.04.2016
Сообщений: 3,339
14.10.2023, 14:34
Цитата Сообщение от Dushevny Посмотреть сообщение
sizeof(имя_массива)
Dushevny, за все время, сколько я пишу на си, ни разу не доводилось применять эту замечательную, но совершенно бесполезную конструкцию.

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

sizeof(имя_массива) == sizeof(указатель)

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

Как мне кажется, если ты вынужден использовать sizeof(имя_массива), то стоит еще раз подумать над кодом. Это как ситуация с goto, если структура кода продумана, пользоваться им не приходится.

Добавлено через 6 минут
Цитата Сообщение от Dushevny Посмотреть сообщение
Нет, важно. Если вы не осилили даже терминологию
Для вас это важно. Для меня... читай выше. Если не понял с первого раза, читай еще раз, и так до тех пор, пока не придет понимание вселенского дзена пофигизма.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
14.10.2023, 14:34
Цитата Сообщение от Dushevny Посмотреть сообщение
Вот пример:
ну что ж почитаем
6.2.4 Storage durations of objects
1 An object has a storage duration that determines its lifetime. There are four storage
durations: static, thread, automatic, and allocated. Allocated storage is described in
7.22.3.
2 The lifetime of an object is the portion of program execution during which storage is
guaranteed to be reserved for it. An object exists, has a constant address,33) and retains
its last-stored value throughout its lifetime.34) If an object is referred to outside of its
lifetime, the behavior is undefined. The value of a pointer becomes indeterminate when
the object it points to (or just past) reaches the end of its lifetime.
6.2.4 Сроки хранения объектов
1 Объект имеет продолжительность хранения, определяющую его время жизни. Есть четыре хранилища
продолжительность: статическая, потоковая, автоматическая и выделенная. Выделенное хранилище описано в
7.22.3.
2 Время жизни объекта — это часть выполнения программы, в течение которой сохраняется память.
гарантированно будет зарезервировано для него. Объект существует, имеет постоянный адрес33) и сохраняет
его последнее сохраненное значение на протяжении всей его жизни.34) Если на объект ссылаются за пределами его
время жизни, поведение не определено. Значение указателя становится неопределенным, если
объект, на который он указывает (или только что прошедший), достигает конца своего существования.
время жизни(сроки хранения) и где тут список объектов?
Цитата Сообщение от Dushevny Посмотреть сообщение
С той же страницы:
с какой той же? первая цитата на 56 странице вторая на 60
первая в главе
6.2.4 Storage durations of objects
вторая в главе
6.2.5 Types
ниче что это разные главы
— 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.
— Тип указателя может быть производным от типа функции или типа объекта, называемого
ссылочный тип. Тип указателя описывает объект, значение которого предоставляет ссылку.
к сущности ссылочного типа. Тип указателя, производный от ссылочного типа T.
иногда называют «указателем на Т». Создание типа указателя из
ссылочный тип называется «производным типа указателя». Тип указателя является полным
тип объекта.
взято здесь https://www.open-std.org/jtc1/... /n1548.pdf
где тут ответ на вопрос какие объекты отвечает на свойство массива
Цитата Сообщение от Dushevny Посмотреть сообщение
Перейти к следующему путем увеличения указателя на 1.
кстати, если массив объект то увеличивая указатель на 1 мы переходим к следующему массиву?
Цитата Сообщение от Dushevny Посмотреть сообщение
Чтение документации из интернета вслух только за деньги, извините.
мало читать нужно понимать.
Цитата Сообщение от Dushevny Посмотреть сообщение
P.S. И не припомню, чтобы пил с вами на брудершафт.
Да боже упаси.

и цитаты нужно приводить не скриншотами, а текстом с указанием ссылки
0
фрилансер
 Аватар для Алексей1153
6508 / 5758 / 1135
Регистрация: 11.10.2019
Сообщений: 15,407
14.10.2023, 15:10
ValeryS, простыми словами, объект - это единая сущность, которая размещена в памяти. Переменная - это объект. Массив - это объект. Указатель - это объект

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

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
typedef int (ARR)[10];
 
void func(ARR arr)
{
    for (size_t i = 0; i != (sizeof(ARR) / sizeof *arr); i++)
    {
        arr[i]=i;
    }
}
 
int main()
{
    ARR arr={};
    
    func(arr);
    
    for (size_t i = 0; i != (sizeof arr / sizeof *arr); i++)
    {
        printf("%d,",arr[i]);
    }
}
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
14.10.2023, 15:27
Цитата Сообщение от Алексей1153 Посмотреть сообщение
простыми словами, объект - это единая сущность, которая размещена в памяти. Переменная - это объект. Массив - это объект.
переменную можно сложить, вычесть, скопировать и т.д
можно ли такое с массивами?
вот я и говорю массив это недообъект, как был в 70х годах, так и остался гомогенные(однотипные)данные которые лежат в памяти подряд( с учетом выравнивания может с "дырами")
1
2493 / 1157 / 709
Регистрация: 25.04.2016
Сообщений: 3,339
14.10.2023, 15:40
Алексей1153, а что это у вас там за магическое число в третьей строчке кода, уж не размер ли массива часом? Он самый. Иными словами "размер массива известен в каждый момент времени", что мешает передать его вместе с массивом или вообще вбить константой?
0
фрилансер
 Аватар для Алексей1153
6508 / 5758 / 1135
Регистрация: 11.10.2019
Сообщений: 15,407
14.10.2023, 15:51
Цитата Сообщение от ValeryS Посмотреть сообщение
переменную
переменная - это объект. Про какой тип говорится?

ValeryS,
у каждого объекта (в зависимости от его типа) есть свои доступные методы.
У int это присвоение, сложение, умножение и так далее.
У указателя это разность, разыменование, присвоение
У массива нет присваивания, сложения. Но есть оператор [] и оператор преобразования к указателю на первый элемент

Добавлено через 53 секунды
Цитата Сообщение от stake-k26 Посмотреть сообщение
что мешает передать его вместе с массивом
ничего не мешает. Но повлияет на быстродействие

Добавлено через 26 секунд
Цитата Сообщение от stake-k26 Посмотреть сообщение
вбить константой
это хороший вариант, но не очень удобный
0
2493 / 1157 / 709
Регистрация: 25.04.2016
Сообщений: 3,339
14.10.2023, 16:01
Алексей1153, и тут мы приходим к структурам данных, которые позволяют нам хранить и данные, и количество этих данных, и указатели при необходимости. О чем говорилось 10-ю или более постами ранее.

Добавлено через 6 минут
А уж про потерю производительности.. нет. тут я просто молчу. Давно уже не времена 8086-ых, и это сложно назвать потерей, у меня просто язык не поворачивается.

Вообще я придерживаюсь принципа "не хочешь терять производительность, пиши на ассемблере", а то тут можно говорить даже о том, что обращение к элементу массива - это потеря производительности, он же у нас в ОЗУ хранится, а не в регистрах процессора.
0
1520 / 535 / 79
Регистрация: 22.09.2023
Сообщений: 1,704
14.10.2023, 16:25
Цитата Сообщение от stake-k26 Посмотреть сообщение
Dushevny, за все время, сколько я пишу на си, ни разу не доводилось применять эту замечательную, но совершенно бесполезную конструкцию.
А мне приходится постоянно. Почему язык должен быть заточен исключительно под ваши задачи и не должен быть заточен под мои? Или может вы вручную делаете то, что можно гораздо элегантнее сделать используя возможности языка, о которых вы не знаете (это нормально, "никто не может объять необъятного") и не хотите узнавать и кичитесь этим (а это плохо, снова см. "эффект Даннинга-Крюгера").

Цитата Сообщение от ValeryS Посмотреть сообщение
время жизни(сроки хранения) и где тут список объектов?
Ну раз они упоминаются в стандарте, вы можете найти там их определение и составить их список самостоятельно. Нужно только почитать стандарт. Там может быть еще много интересного и полезного.

Цитата Сообщение от ValeryS Посмотреть сообщение
ниче что это разные главы
Да, ниче. Там еще 1021 упоминание слова "object".
Цитата Сообщение от ValeryS Посмотреть сообщение
кстати, если массив объект то увеличивая указатель на 1 мы переходим к следующему массиву?
Да. Внезапно?
Цитата Сообщение от ValeryS Посмотреть сообщение
мало читать нужно понимать.
Так это же вы пытаетесь спорить со стандартом, не я.
Цитата Сообщение от ValeryS Посмотреть сообщение
и цитаты нужно приводить не скриншотами, а текстом с указанием ссылки
Документ лежит у меня на диске. Ссылку на него привести затруднительно, но вы справились с его поиском самостоятельно. А снимок экрана чтобы вы не стали утверждать, что я ее выдумал и смогли найти самостоятельно.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
14.10.2023, 16:33
Цитата Сообщение от Dushevny Посмотреть сообщение
Да. Внезапно?
покаж
C
1
2
int a[5];
int b[3];
как из массива a перейти к b
а если так
C
1
2
3
4
int a[5];
char c;
double d;
int b[3];
0
1520 / 535 / 79
Регистрация: 22.09.2023
Сообщений: 1,704
14.10.2023, 16:33
Цитата Сообщение от ValeryS Посмотреть сообщение
переменную можно сложить, вычесть, скопировать и т.д
можно ли такое с массивами?
Указатель - переменная? Можно ли сложить два указателя?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
14.10.2023, 16:37
Цитата Сообщение от Dushevny Посмотреть сообщение
Так это же вы пытаетесь спорить со стандартом, не я.
Я не пытаюсь спорить со стандартом, я к нему критически отношусь, не привык все брать на веру.

Добавлено через 1 минуту
Цитата Сообщение от Dushevny Посмотреть сообщение
Указатель - переменная?
нет
Цитата Сообщение от Dushevny Посмотреть сообщение
Можно ли сложить два указателя?
а где мы говорим об указателях?
0
1520 / 535 / 79
Регистрация: 22.09.2023
Сообщений: 1,704
14.10.2023, 16:47
Цитата Сообщение от ValeryS Посмотреть сообщение
покаж
C++
1
2
3
4
5
6
7
typedef int array[10];
array Array_of_arrays[5];
void test()
{
    array * ptr = Array_of_arrays;    // ptr указывает на первый массив.
    ++ptr;                    // ptr указывает на следующий массив.
}
Цитата Сообщение от ValeryS Посмотреть сообщение
а если так
C++
1
2
3
4
int a[5];
char c;
double d;
int b[3];
А если так:
C++
1
2
3
4
5
int a;
char b;
int c;
 
int * ptr = &a;
От этого ptr перестал быть указателем на int? Или его надо запретить?

Добавлено через 2 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
Добавлено через 1 минуту
Цитата Сообщение от Dushevny
Указатель - переменная?
нет
Тогда я пас.

Добавлено через 50 секунд
Цитата Сообщение от ValeryS Посмотреть сообщение
а где мы говорим об указателях?
В этой теме. Прочтите ее заголовок.

Добавлено через 1 минуту
Цитата Сообщение от Dushevny Посмотреть сообщение
Тогда я пас.
Хорошо, перефразирую: Можно ли сделать переменную типа "указатель" и сложить две такие переменные?

Добавлено через 2 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
Я не пытаюсь спорить со стандартом, я к нему критически отношусь, не привык все брать на веру.
Увы, со стандартом именно "его надо брать на веру".
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
14.10.2023, 16:51
Цитата Сообщение от Dushevny Посмотреть сообщение
array * ptr = Array_of_arrays;    // ptr указывает на первый массив.
а первый массив это что? уж не элемент ли второго массива?
Цитата Сообщение от Dushevny Посмотреть сообщение
typedef int array[10];
array Array_of_arrays[5];
Цитата Сообщение от Dushevny Посмотреть сообщение
++ptr;                    // ptr указывает на следующий массив.
казуистика. следующий массив это что?
чем тогда отличается
C
1
2
3
int a[5];
int * ptr=a;
ptr++;
Цитата Сообщение от Dushevny Посмотреть сообщение
array * ptr = Array_of_arrays;    // ptr указывает на первый массив.
ptr это указатель?
а мы говорим о массивах
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Массив - это не указатель. Миллион раз уже, кажется, подробно объяснялось.
Цитата Сообщение от Алексей1153 Посмотреть сообщение
массив - это объект
Цитата Сообщение от Dushevny Посмотреть сообщение
Перейти к следующему путем увеличения указателя на 1.
(вделено мной)
0
2493 / 1157 / 709
Регистрация: 25.04.2016
Сообщений: 3,339
14.10.2023, 17:05
Цитата Сообщение от Dushevny Посмотреть сообщение
Почему язык должен быть заточен исключительно под ваши задачи
Вы говорите о вполне универсальном языке программирования, о какой "заточенности" идет речь?

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

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

Я сознательно выбирал си и знал на что шел изначально. И меня вполне устраивает имеющийся функционал и возможности языка. Если вас они не устраивают, то вы точно уверены в том, что проблема в моей точке зрения?

Конечно, вы можете сказать, что вас все устраивает, и я понял вас превратно, однако вот ваши же слова дословно:
Цитата Сообщение от Dushevny Посмотреть сообщение
мне приходится постоянно.
Вам приходится, т.е. вы не хотите, но вынуждены. Что ж, соболезную. Однако это исключительно ваши проблемы и меня едва ли касаются.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.10.2023, 17:05

Можно ли сделать приложение для 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;}, ...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
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. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru