Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 25.01.2018
Сообщений: 11
1

Указатель на двумерный массив

26.01.2018, 23:03. Показов 1748. Ответов 5
Метки нет (Все метки)

Здравствуйте. Программирую в Visual Studio 2017, на скриншоте собственно сама проблема. Как все так правильно было бы создать указатель на двумерный массив?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Миниатюры
Указатель на двумерный массив  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2018, 23:03
Ответы с готовыми решениями:

Указатель на двумерный массив
Здравствуйте. Подскажите пожалуйста, а существуют ли в C/C++ указатели: 1) на двух-трёхмерные...

Указатель на двумерный массив
Как сделать то же самое с двумерным массивом? Как работать с двумерными или n- мерными массивами...

Указатель на двумерный массив
хочу заменить вот такую запись: fs.read((char*)&size_struct, sizeof(int));...

Указатель на двумерный массив
A эквивалентно *(*(A+i)+j). Просто давайте допустим, что у нас матрица A. Как вычислить допустим А?

5
93 / 91 / 62
Регистрация: 23.11.2013
Сообщений: 242
26.01.2018, 23:07 2
Лучший ответ Сообщение было отмечено SAtremU как решение

Решение

Вы ведь хотели что-то типа этого?
C++
1
int (*p_arr)[40] = arr;
0
298 / 207 / 174
Регистрация: 11.05.2016
Сообщений: 658
26.01.2018, 23:13 3
Лучший ответ Сообщение было отмечено SAtremU как решение

Решение

Для статического можно представить в виде одномерного, к примеру:

C++
1
2
3
4
5
6
7
8
9
10
11
12
    int arr[2][3] = { { 1, 2, 3}, { 4, 5, 6 } };
    
    int *pArr = &arr[0][0];
 
    for(int i=0; i<2; i++)
    {
        for(int j=0; j<3; j++)
        {
            std::cout << *(pArr+(i*3)+j);
        }
        std::cout << "\n";
    }
0
0 / 0 / 0
Регистрация: 25.01.2018
Сообщений: 11
26.01.2018, 23:19  [ТС] 4
Цитата Сообщение от Lambont Посмотреть сообщение
int (*p_arr)[40] = arr;
Спасибо, эта проблема решена. Только вот ещё очень хотелось бы понять. Что дает заключение в скобки (*p_arr)? И почему далее прописаны только вторые квадратные скобки [40]?

Добавлено через 4 минуты
Herji, этот способ более понятен для меня. По сути мы явно задаем указатель на самый первый элемент двумерного массива.
0
93 / 91 / 62
Регистрация: 23.11.2013
Сообщений: 242
26.01.2018, 23:30 5
Цитата Сообщение от SAtremU Посмотреть сообщение
Что дает заключение в скобки (*p_arr)
То, что это указатель на массив из 40 элементов, если бы его не заключили в скобки, а написали int *p_arr[40], то это уже был бы массив из 40 указателей ни тип int
Цитата Сообщение от SAtremU Посмотреть сообщение
И почему далее прописаны только вторые квадратные скобки [40]?
потому что выражение int** p_arr; является объявлением указателя на указатель типа int, а int (*p_arr)[SIZE];, где SIZE - размер массива, является объявлением указателем на массив из SIZE елементов типа int, это два разных типа указателя. Для статического двумерного массива подходит именно второй вариант.
1
0 / 0 / 0
Регистрация: 25.01.2018
Сообщений: 11
26.01.2018, 23:42  [ТС] 6
Lambont, спасибо большое за подробное объяснение, я все понял. Осталось только научить мозг думать в этом направлении )
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2018, 23:42

Указатель на двумерный массив
#include &lt;iostream&gt; using namespace std; int a = { 0 }, b = { 1 }; void foo(int val) { int...

указатель на двумерный массив
Делая игру морской бой, я столкнулся с 1-ой проблемой: void place_ships(char &amp;(&amp;(map+13)+29))...

Указатель на двумерный массив
Возможно ли создать указатель на двумерный массив для вызова его в функции?

Указатель на двумерный массив
Допустим, у меня есть функция: void A(float **b) { b=1; } Тогда почему выдает ошибку при...


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

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

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