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

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

Восстановить пароль Регистрация
 
kostiapp
-43 / 5 / 0
Регистрация: 12.10.2012
Сообщений: 76
18.09.2013, 16:13     Указатель на статический трехмерный массив #1
Как сделать указатель на статический трехмерный массив?
Почему компилятор сам не определяет размер массива,а выбивает ошибку
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**)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2013, 16:13     Указатель на статический трехмерный массив
Посмотрите здесь:

Указатель на статический массив C++
Вернуть указатель на трехмерный массив C++
C++ Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже -->
Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив. C++
Статический указатель класса и конструктор в private C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fyret
184 / 170 / 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} };
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; создается не константный указатель, а указатель на константу. Что за бред?
Fyret
184 / 170 / 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.
MbICJIuTeJIb_u3
KeM6Pug}I{a
49 / 49 / 2
Регистрация: 23.08.2013
Сообщений: 202
18.09.2013, 22:43     Указатель на статический трехмерный массив #5
Массив в c++ это константный указатель на область в память с которой начинается структура или массив.
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 минуты
Неужели ни кто не знает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2013, 21:31     Указатель на статический трехмерный массив
Еще ссылки по теме:

C++ создать статический массив строк как статический массив указателей на строки, задание ниже -->
Статический указатель C++
Указатель на статический массив как параметр шаблона C++

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

Или воспользуйтесь поиском по форуму:
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 минуты
в с++ массив это константный указатель на начало данных, так что к элементам массива можно обращаться и с помощью арифметики указателей.
Yandex
Объявления
19.09.2013, 21:31     Указатель на статический трехмерный массив
Ответ Создать тему
Опции темы

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