Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

28.06.2014, 17:33. Просмотров 470. Ответов 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;
}
Правда, пока затрудняюсь ответить, где это может быть полезно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2014, 17:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель на безразмерный массив (C++):

Безразмерный массив - C++
Доброго времени суток! Столкнулся с такой проблемой: как можно сделать массив int не указывая его размерность...тобишь чтоб он сам мог...

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

Дан безразмерный массив.Вставить количество символов каждой строки вначало этой же строки. - C++
Массив считывается из файла,а в проге указывается как указатель на указатель **.Запуск программы+файла происходит из командной строки.Если...

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

Динамический массив и указатель на указатель - C++
Спасибо за внимание) Задача такова: нужно удалить элемент по индексу, при этом уменьшить сам массив на 1 (т.е. удалили элемент - уменьшился...

Как получить ссылку на указатель или указатель на указатель в массиве? - C++
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

7
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
28.06.2014, 17:43 #2
Цитата Сообщение от Tulosba Посмотреть сообщение
А в каком случае можно (и нужно ли) использовать подобный указатель в плюсах (если конечно не прибегать к reinterpret_cast)?
http://ideone.com/uGWNsO
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.06.2014, 18:08  [ТС] #3
Croessmah,
Цитата Сообщение от Tulosba Посмотреть сообщение
Код C
Или что ты хотел этим показать?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
28.06.2014, 18:16 #4
Цитата Сообщение от Tulosba Посмотреть сообщение
Или что ты хотел этим показать?
да так, старческий маразм

Добавлено через 5 минут
C++
1
static int v[];
а разве это не incomplete type?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.06.2014, 18:37  [ТС] #5
Цитата Сообщение от Croessmah Посмотреть сообщение
а разве это не incomplete type?
А какая разница? Я просто привел пример выражения, где можно использовать указатель на безразмерный массив.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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.
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.06.2014, 19:08  [ТС] #7
Croessmah, так я же не утверждаю, что имеет смысл потом разыменовывать или ещё как-то работать с полученным адресом. Всего лишь демонстрация кода, который "съел" компилятор C++.
0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
29.06.2014, 16:02 #8
Tulosba, честно пытался придумать пример, но не вышло Была идея использовать это в каком-нибудь метапрограммировании, но из-за того, что такой указатель не может быть параметром функции все провалилось. Да и решение, даже если бы оно заработало, имело бы более качественные аналоги с использованием других средств. Так что, ИМХО, подобный указатель - это рудимент синтаксиса. И ничего полезного он не делает.
0
29.06.2014, 16:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2014, 16:02
Привет! Вот еще темы с ответами:

Написать функцию принимающую массив и возвращающую указатель на динамический массив - C++
Написать функцию принимающую массив и возвращающую указатель на динамический массив содержащий первые n нaибольших чисел. Как сделать...

Что быстрее использовать, массив э-в, или указатель на массив э-в? - C++
уважаемые, что быстрее использовать, массив э-в, или указатель на массив э-в? или без разницы? С одной стороны обращается все к той же...

OpenCL безразмерный буфер видеокарты RADEON HD6870 - C++
Имею проблему при загрузке массивов в буфер видеокарты под OpenCL (не путать с OpenGL). На борту видео всего 1 Гиг, но умудряюсь записать...

Безразмерный файл забить структурами и осуществить их сортировку - C++
Очень не понятно что в этой задачке от меня требуется)) Текст задачи: Безразмерный файл забить структурами и осуществить их...


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

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

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