Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
3 / 3 / 0
Регистрация: 08.03.2015
Сообщений: 18
1

Как найти количество элементов массива, зная лишь адрес первого элемента и тип?

03.05.2015, 13:53. Показов 1879. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Где-то в коде объявлен массив, кол-во элементов неизвестно, имеется ссылочная переменная на этот массив и все, назовем ее (А), как узнать кол-во элементов в массиве?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.05.2015, 13:53
Ответы с готовыми решениями:

Найти количество элементов массива, больших первого элемента массива
Одномерные массивы Ввести или сгенерировать одномерный целочисленный массив A размерности N. Найти количество элементов массива больших...

Найти количество элементов массива после первого элемента, равного 15
№1 Дан массив из 250 чисел. Найти количество элементов массива,начиная с первого числа,равного 15. №2 В массиве А(2;2) увеличить...

Найти количество элементов массива до первого элемента равного 111
Доброго времени суток!прошу помочь решить лабораторные по информатике!значит так!1)дан массив из 10 элементов.найти количество элементов...

10
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.05.2015, 13:56 2
Никак.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
03.05.2015, 15:49 3
Цитата Сообщение от borisov_01 Посмотреть сообщение
Где-то в коде объявлен массив
Динамически объявлен?
0
3 / 3 / 0
Регистрация: 08.03.2015
Сообщений: 18
03.05.2015, 16:17  [ТС] 4
Попробую задать иначе: есть ссылочная переменная содержащая адрес первого элемента массива (объявленного статически), тип данных массива соответственно можно узнать, ведь у нас есть ссылка на него, необходимо найти количество элементов массива
0
18 / 18 / 10
Регистрация: 20.04.2015
Сообщений: 108
03.05.2015, 16:22 5
если массив char то последним элементом должен быть '\0' (если он не двумерный)
0
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.05.2015, 16:27 6
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

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

если бы у вас была ссылка на сам массив - бес проблем.

но у вас только адрес первого элемента.
указатели такую информацию не хранят.

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

но у вас обычный статический массив.

так что - никак.
1
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
03.05.2015, 16:30 7
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

Цитата Сообщение от borisov_01 Посмотреть сообщение
есть ссылочная переменная содержащая адрес первого элемента массива (объявленного статически),
Если имеется ввиду, имя массива, то варианты такие:
C++
1
cout << sizeof(A) / sizeof(int) << endl; // тип массива int
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// N - количество элементов (вычисляется автоматически, в зависимости от переданного массива)
template<class T, size_t N>  
size_t view (const T (&ar)[N] )   //<--- передача по ссылке    
{   
    return N;
}
 
int main()
{
    int ar1[]={ 1, 2, 3, 4, 5, 6, 7, 8, 9};
    
    float ar2[]={ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 7.5f };
    
    size_t N = view(ar1);
    cout << N << endl;
    N = view(ar2);
    cout << N << endl;
 
}
1
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.05.2015, 16:32 8
Цитата Сообщение от Iridiscent Посмотреть сообщение
если массив char то последним элементом должен быть '\0' (если он не двумерный)
никому он ничего не должен.
это сильно зависит от способа использования.

например, техника boost::optional<T> под капотом использует массив для аллокации объекта.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//--- сильно упрощено
//--- реальная реализация сложнее
//--- учитывает выравнивание, и тп.
 
//--- хранилище данных способное вместить в себя объект типа some
char buf[ sizeof(some) ];
 
//--- аллоцируем объект в хранилище
new (buf) some; //<--- и что по вашему теперь содержит чаровый буфер?
 
//--- доступ к объекту, расположенному в хранилище
some* ptr = reinterpret_cast<some*>(buf); 
 
ptr->work();
1
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
03.05.2015, 16:43 9
Цитата Сообщение от borisov_01 Посмотреть сообщение
Попробую задать иначе:
Всегда лучше пример привести, чем на словах объяснять.
0
3 / 3 / 0
Регистрация: 08.03.2015
Сообщений: 18
04.05.2015, 00:59  [ТС] 10
массив типа GLuint (из библиотеки GLUT) необходимо передать в функцию? и в функции определить кол-во его элементов, лично у меня(раздел для новичков) получается передать в функцию только ссылку на массив, поэтому такой вопрос), я понимаю то что можно передать независимо в функцию кол-во элементов sizeof(mas)/sizeof(GLuint) и много чего еще, НО меня интересуют именно возможности при передачи ссылки на массив.

Добавлено через 5 минут
void XXX(GLuint* mas)

Добавлено через 4 минуты
Если я туплю то заранее прошу меня извинить, можно конечно сделать так void XXX(sizeof(mas)/sizeof(GLuint)), но это очевидно, а меня интересует все таки void XXX(GLuint* mas)
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
04.05.2015, 01:07 11
Цитата Сообщение от borisov_01 Посмотреть сообщение
НО меня интересуют именно возможности при передачи ссылки на массив.
Добавлено через 5 минут
void XXX(GLuint* mas)
Не путай понятия.Передача ссылки на массив это вот такое:
C++
1
void XXX(GLuint (&mas)[10]);
У тебя просто указатель.

Добавлено через 3 минуты
Сделай функцию шаблонной (пример в 7 посте), передавай туда имя массива, размер там автоматически определяется (если только массив статически создан).

Добавлено через 2 минуты
Насчёт передачи просто указателя, уже написали выше.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.05.2015, 01:07
Помогаю со студенческими работами здесь

Найти сумму и количество элементов, расположенных до первого положительного элемента массива
Доброй ночи форумчани:) Помогите с данной задачей: С помощью выражения A = rand(1,10)*100-50 сгенерировать вектор из 10 случайных чисел....

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

Найти количество элементов массива, расположенных после первого нулевого элемента
Задан массив целых чисел Х(n). Найти количество элементов массива, расположенных после первого нулевого элемента.

Найти произведение и количество элементов массива, расположенных до первого отрицательного элемента
Народ помогите построить программу Задание такое: Найти произведение и количество элементов массива, расположенных до первого...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Лучшие практики оптимизации Docker Image
Mr. Docker 13.03.2025
Размер Docker-образа влияет на множество аспектов работы с контейнерами. Чем больше образ, тем дольше его загрузка в реестр и выгрузка из него. Для команд разработки, работающих с CI/ CD пайплайнами,. . .
Вопросы на собеседовании по Docker
Mr. Docker 13.03.2025
Ты сидишь напротив технического специалиста, и вдруг звучит вопрос про Docker Swarm или многоэтапные сборки. Пот на лбу? Не переживай, после этой статьи ты будешь готов ко всему! Эта статья будет. . .
Поиск текста в сносках : замена дефиса на тире или тире на дефис...
РоΜа 13.03.2025
Нужно было найти текст в сносках и заменить. Почему-то метод селекшн не сработал. . . пришлось гуглить. найденный на форумвба код пришлось править. Смысл - заменяет в сносках дефисы и тире на нужные. . . .
Real PATH definitions in bash scripts
jigi33 13.03.2025
Как поймать путь и путь к директории относительно запускаемого файла в BASH 1. поймать путь через вывод $(pwd) 2. более правильно - на основе realpath (см. скриншот)
Django или Flask: что выбрать для веб-разработки на Python
py-thonny 13.03.2025
Django – это высокоуровневый фреймворк, который придерживается философии "всё включено". Он предоставляет разработчику готовые решения для большинства типичных задач веб-разработки: от аутентификации. . .
Непрерывное развертывание в Java с Kubernetes
Javaican 13.03.2025
Чем так привлекателен Kubernetes для развертывания Java-приложений? Этот оркестратор контейнеров позволяет автоматизировать развертывание, масштабирование и управление контейнеризированными. . .
Предотвращение XSS, CSRF и SQL-инъекций в JavaScript
run.dev 13.03.2025
JavaScript занимает первые позиции среди языков веб-разработки, но его распространенность делает его привлекательной целью для злоумышленников. Межсайтовый скриптинг (XSS), межсайтовая подделка. . .
PHP 8: JIT-компиляция и улучшение производительно­сти
Jason-Webb 13.03.2025
PHP никогда не славился своей скоростью. Многие сталкивались с проблемами производительности при работе со сложными вычислениями или обработкой больших объемов данных. Традиционная модель выполнения. . .
Сериализация данных с Apache Avro в Kafka
Javaican 12.03.2025
Apache Kafka стала одним из ключевых решений для работы с большими потоками данных. Однако с ростом объемов передаваемых данных возникает проблема: как эффективно сериализовать и десериализовать. . .
Создание потребителей Kafka с помощью Reactor Kafka
Javaican 12.03.2025
Reactor Kafka — это библиотека, объединяющая Apache Kafka с реактивным программированием на базе Project Reactor. Такое сочетание позволяет строить неблокирующие, асинхронные приложения с контролем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru