Форум программистов, компьютерный форум CyberForum.ru

Указатель на безразмерный массив - C++

Восстановить пароль Регистрация
 
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.06.2014, 17:33     Указатель на безразмерный массив #1
Есть такое понятие как "безразмерный массив" или "массив неизвестного размера".
В голых сях можно например указателю такого типа присваивать адрес массива любой размерности:
C
1
2
3
4
5
6
7
8
9
10
11
12
int main() {
    
    int (*p)[]; // указатель на безразмерный массив
    
    int a[] = {1};
    int b[] = {1,2};
 
    p = &a; // работает
    p = &b; // тоже работает
 
    return 0;
}
А в каком случае можно (и нужно ли) использовать подобный указатель в плюсах (если конечно не прибегать к reinterpret_cast)?

Один вариант уже нашел:
C++
1
2
3
4
5
6
7
8
9
10
struct C
{
    static int v[];
};
 
int main() 
{
    int (*p)[] = &C::v;
    return 0;
}
Правда, пока затрудняюсь ответить, где это может быть полезно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2014, 17:33     Указатель на безразмерный массив
Посмотрите здесь:

Дан безразмерный массив.Вставить количество символов каждой строки вначало этой же строки. C++
C++ Безразмерный файл забить структурами и осуществить их сортировку
Безразмерный массив C++
Что быстрее использовать, массив э-в, или указатель на массив э-в? C++
Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
28.06.2014, 17:43     Указатель на безразмерный массив #2
Цитата Сообщение от Tulosba Посмотреть сообщение
А в каком случае можно (и нужно ли) использовать подобный указатель в плюсах (если конечно не прибегать к reinterpret_cast)?
http://ideone.com/uGWNsO
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.06.2014, 18:08  [ТС]     Указатель на безразмерный массив #3
Croessmah,
Цитата Сообщение от Tulosba Посмотреть сообщение
Код C
Или что ты хотел этим показать?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
28.06.2014, 18:16     Указатель на безразмерный массив #4
Цитата Сообщение от Tulosba Посмотреть сообщение
Или что ты хотел этим показать?
да так, старческий маразм

Добавлено через 5 минут
C++
1
static int v[];
а разве это не incomplete type?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.06.2014, 18:37  [ТС]     Указатель на безразмерный массив #5
Цитата Сообщение от Croessmah Посмотреть сообщение
а разве это не incomplete type?
А какая разница? Я просто привел пример выражения, где можно использовать указатель на безразмерный массив.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
28.06.2014, 18:45     Указатель на безразмерный массив #6
Цитата Сообщение от Tulosba Посмотреть сообщение
А какая разница?
ну как бы
A class that has been declared but not defined, or an array of unknown size or of incomplete element type, is an incompletely-defined object type.43 Incompletely-defined object types and the void types are incomplete types (3.9.1). Objects shall not be defined to have an incomplete type.

43) The size and layout of an instance of an incompletely-defined object type is unknown.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.06.2014, 19:08  [ТС]     Указатель на безразмерный массив #7
Croessmah, так я же не утверждаю, что имеет смысл потом разыменовывать или ещё как-то работать с полученным адресом. Всего лишь демонстрация кода, который "съел" компилятор C++.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2014, 16:02     Указатель на безразмерный массив
Еще ссылки по теме:

Динамический массив и указатель на указатель C++
Написать функцию принимающую массив и возвращающую указатель на динамический массив C++
C++ Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив)

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

Или воспользуйтесь поиском по форуму:
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
29.06.2014, 16:02     Указатель на безразмерный массив #8
Tulosba, честно пытался придумать пример, но не вышло Была идея использовать это в каком-нибудь метапрограммировании, но из-за того, что такой указатель не может быть параметром функции все провалилось. Да и решение, даже если бы оно заработало, имело бы более качественные аналоги с использованием других средств. Так что, ИМХО, подобный указатель - это рудимент синтаксиса. И ничего полезного он не делает.
Yandex
Объявления
29.06.2014, 16:02     Указатель на безразмерный массив
Ответ Создать тему
Опции темы

Текущее время: 06:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru