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

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

Войти
Регистрация
Восстановить пароль
 
kostiapp
-43 / 5 / 0
Регистрация: 12.10.2012
Сообщений: 76
#1

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

18.09.2013, 16:13. Просмотров 784. Ответов 6
Метки нет (Все метки)

Как сделать указатель на статический трехмерный массив?
Почему компилятор сам не определяет размер массива,а выбивает ошибку
int mass[][][]=
{
{ { {1}, {1} }, { {1}, {1} } },
{ { {1}, {1} }, { {1}, {1} } }
};


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream.h>
#include <conio.h>
 
 
int main()
{
clrscr();
int mass[2][2][2]=
{
{ { {1}, {1} }, { {1}, {1} } },
{ { {1}, {1} }, { {1}, {1} } }
};
int ***a;
a= &mass; или a= &mass[0][0][0]; не работают
getch();
return 0;
}
Так же где можно почитать смысл явного указания типа и когда оно используется (**int) (int**)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2013, 16:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель на статический трехмерный массив (C++):

Вернуть указатель на трехмерный массив - C++
Подскажите пжл как вернуть указатель из моей функии на трехмерный массив. double dif(double kof,double lp,double step){ double ...

Указатель на статический массив - C++
Есть несколько статических массивов: const char a = { 0, 1, 2, 3 }; const char b = { 4, 5, 6, 7 }; const char c = { 8, 9, 10, 11 }; ...

Указатель на статический массив как параметр шаблона - C++
Добрый день. Необходимо параметр шаблона сделать указателем и передавать в него указатель на статический массив: template&lt;size_t...

Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже --> - C++
Слова английского текста рассортировать по возрастанию количества заданной буквы в слове. Слова с одинаковым количеством такой буквы...

создать статический массив строк как статический массив указателей на строки, задание ниже --> - C++
Слова английского текста, начинающиеся с гласных букв, рассортировать в алфавитном порядке по первой согласной букве слова. Остальные слова...

Статический указатель - C++
Привет! Возникли вопросы в процессе изучения C/С++. Если объявить статическую (static) локальную переменную, то эта переменная будет...

6
Fyret
185 / 171 / 13
Регистрация: 30.07.2013
Сообщений: 359
18.09.2013, 16:36 #2
В С++ нет многомерных массивов, только одномерные. Но есть массивы массивов, массивы массивов массивов и т.д. Чтобы объявить массив чего-то, надо точно знать, что это.

Т.е. вот это массив массивов по 2 элемента:
C++
1
int array[][2] = { {1, 2}, {3, 4} };
а это - массив неизвестно чего:
C++
1
int array[][] = { {1, 2}, {3, 4} };
0
kostiapp
-43 / 5 / 0
Регистрация: 12.10.2012
Сообщений: 76
18.09.2013, 20:52  [ТС] #3
Цитата Сообщение от Fyret Посмотреть сообщение
В С++ нет многомерных массивов, только одномерные. Но есть массивы массивов, массивы массивов массивов и т.д. Чтобы объявить массив чего-то, надо точно знать, что это.

Т.е. вот это массив массивов по 2 элемента:
C++
1
int array[][2] = { {1, 2}, {3, 4} };
а это - массив неизвестно чего:
C++
1
int array[][] = { {1, 2}, {3, 4} };
Спасибо огромное, а с остальными вопросами что?

Добавлено через 17 минут
Еще вопрос, читаю в книге :
int nVar = 10;
int pVar = $nVar;
const int* pcVar = pVar; //тут комметарий что так можно. Но как? pVar теперь станет константой? Указатель ведь на константу.

Добавлено через 6 минут
Далее пример :
int * pVar2 = pcVar; // тут комментарий что так нельзя.
И далее :
Присваивание pcVar = pVar; корректно - при нем добавляется ограничение const. Чему добавляется?
Последнее же присваивание во фрагменте не допустимо, так как оно пытается удалить константность pcVar.

До этого написано, что int * const cpInt = &nVar; - обьявление постоянного указателя на переменное целое.
Значит в const int* pcVar = pVar; создается не константный указатель, а указатель на константу. Что за бред?
0
Fyret
185 / 171 / 13
Регистрация: 30.07.2013
Сообщений: 359
18.09.2013, 21:49 #4
Цитата Сообщение от kostiapp Посмотреть сообщение
а с остальными вопросами что?
Не очень понятно, что за вопросы. Если что, С++ - строго типизированный язык, т.е. каждая переменная имеет тип и сменить его не может.

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

По поводу указателей разной степени константности:

1) const int*, он же int const* - указатель на константу. Через него нельзя изменить данные, на которые он указывает, но можно с его помощью указывать на разные данные.
C++
1
2
3
4
5
int k = 5;
int j = 3;
const int* cpK = &k;
*cpK = 3; // нельзя!
cpK = &j; // можно
2) int* const - константный указатель. Через него можно менять данные, но нельзя им указать на другие данные.
C++
1
2
3
4
5
int k = 5;
int j = 3;
int* const pcK = &k;
*pcK = 3; // можно
pcK = &j; // нельзя!
3) const int* const - константный указатель на константу, ничего нельзя

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

4) как следствие
C++
1
int * pVar2 = pcVar; //нельзя
т.к. теряется константность, т.е. можно изменить что-то, что менять не должно. Если очень хочется, для этого есть const_cast.
0
MbICJIuTeJIb_u3
KeM6Pug}I{a
49 / 49 / 2
Регистрация: 23.08.2013
Сообщений: 202
18.09.2013, 22:43 #5
Массив в c++ это константный указатель на область в память с которой начинается структура или массив.
0
kostiapp
-43 / 5 / 0
Регистрация: 12.10.2012
Сообщений: 76
19.09.2013, 20:10  [ТС] #6
Цитата Сообщение от Fyret Посмотреть сообщение
Не очень понятно, что за вопросы. Если что, С++ - строго типизированный язык, т.е. каждая переменная имеет тип и сменить его не может.

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

По поводу указателей разной степени константности:

1) const int*, он же int const* - указатель на константу. Через него нельзя изменить данные, на которые он указывает, но можно с его помощью указывать на разные данные.
C++
1
2
3
4
5
int k = 5;
int j = 3;
const int* cpK = &k;
*cpK = 3; // нельзя!
cpK = &j; // можно
2) int* const - константный указатель. Через него можно менять данные, но нельзя им указать на другие данные.
C++
1
2
3
4
5
int k = 5;
int j = 3;
int* const pcK = &k;
*pcK = 3; // можно
pcK = &j; // нельзя!
3) const int* const - константный указатель на константу, ничего нельзя

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

4) как следствие
C++
1
int * pVar2 = pcVar; //нельзя
т.к. теряется константность, т.е. можно изменить что-то, что менять не должно. Если очень хочется, для этого есть const_cast.
Доллар я сам добавил, случайно, вместо &, пхп привычка)
Поигравшись в компиляторе я разобрался с указателем на константу. Что самое интересное можно обьявить указатель на константу, а использовать его с обычной переменной, покрайней мере у меня так.

Последнее как обьявить указатель на трехмерный, статический массив?
Допустим на int array[3][3][3];

Добавлено через 7 часов 43 минуты
Неужели ни кто не знает
0
MbICJIuTeJIb_u3
KeM6Pug}I{a
49 / 49 / 2
Регистрация: 23.08.2013
Сообщений: 202
19.09.2013, 21:31 #7
Цитата Сообщение от kostiapp Посмотреть сообщение
Допустим на int array[3][3][3];
C++
1
2
3
int *** d; //трёх мерный
int **** c; //четырех мерный
int ************************************************* ultra; //+100500 мерный
Добавлено через 2 минуты
в с++ массив это константный указатель на начало данных, так что к элементам массива можно обращаться и с помощью арифметики указателей.
0
19.09.2013, 21:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2013, 21:31
Привет! Вот еще темы с ответами:

Статический указатель - C++
пример, есть такая конструкция например: class A { ... }; class B { private:

Не работает статический указатель - C++
Добрый день! Подскажите пожалуйста почему не работает такая конструкция ? class A { public: static Message *K; };

Статический член указатель на класс - C++
Доброго времени суток. Что требовалось: создать статический указатель на класс CPerson, чтобы сохранить в него нужный объект. Как пытался...

Статический указатель класса и конструктор в private - C++
Всем привет! Вчера препод показал один прием, я до конца не могу понять как он работает. В классе есть статический указатель class...


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

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

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