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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
#1

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

28.06.2014, 17:33. Просмотров 389. Ответов 7
Метки нет (Все метки)

Есть такое понятие как "безразмерный массив" или "массив неизвестного размера".
В голых сях можно например указателю такого типа присваивать адрес массива любой размерности:
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++
Что быстрее использовать, массив э-в, или указатель на массив э-в? C++
Динамический массив и указатель на указатель C++
Указатель на массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12535 / 7097 / 797
Регистрация: 27.09.2012
Сообщений: 17,510
Записей в блоге: 2
Завершенные тесты: 1
28.06.2014, 17:43     Указатель на безразмерный массив #2
Цитата Сообщение от Tulosba Посмотреть сообщение
А в каком случае можно (и нужно ли) использовать подобный указатель в плюсах (если конечно не прибегать к reinterpret_cast)?
http://ideone.com/uGWNsO
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.06.2014, 18:08  [ТС]     Указатель на безразмерный массив #3
Croessmah,
Цитата Сообщение от Tulosba Посмотреть сообщение
Код C
Или что ты хотел этим показать?
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12535 / 7097 / 797
Регистрация: 27.09.2012
Сообщений: 17,510
Записей в блоге: 2
Завершенные тесты: 1
28.06.2014, 18:16     Указатель на безразмерный массив #4
Цитата Сообщение от Tulosba Посмотреть сообщение
Или что ты хотел этим показать?
да так, старческий маразм

Добавлено через 5 минут
C++
1
static int v[];
а разве это не incomplete type?
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.06.2014, 18:37  [ТС]     Указатель на безразмерный массив #5
Цитата Сообщение от Croessmah Посмотреть сообщение
а разве это не incomplete type?
А какая разница? Я просто привел пример выражения, где можно использовать указатель на безразмерный массив.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12535 / 7097 / 797
Регистрация: 27.09.2012
Сообщений: 17,510
Записей в блоге: 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
:)
Эксперт С++
4384 / 3227 / 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++
C++ Указатель на массив
C++ OpenCL безразмерный буфер видеокарты RADEON HD6870

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

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

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