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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 156, средняя оценка - 4.75
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
#1

Как обьявить указатель на двумерный массив? - C++

27.02.2012, 22:07. Просмотров 22182. Ответов 15
Метки нет (Все метки)

обьясните на примере как обьявить указатель на двумерный массив и потом обращаться к элементам через указатель
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2012, 22:07     Как обьявить указатель на двумерный массив?
Посмотрите здесь:

C++ Как передать в функцию указатель на двумерный массив заранее неизвестного размера?
C++ Указатель на двумерный массив
Указатель на двумерный массив C++
C++ Указатель на двумерный массив и выше
C++ Как правильно передать в функцию указатель на двумерный массив?
Указатель на двумерный массив C++
указатель на двумерный массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.02.2012, 22:16     Как обьявить указатель на двумерный массив? #2
C
1
2
T_data** arr;
*(*(arr + i) + j) = 5; /*eq. arr[i][j] = 5 */
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
27.02.2012, 22:21  [ТС]     Как обьявить указатель на двумерный массив? #3
а что это такое T_data
как создать указатель на например int mas[3][3]
Luke
37 / 37 / 1
Регистрация: 21.02.2012
Сообщений: 95
27.02.2012, 22:32     Как обьявить указатель на двумерный массив? #4
sergeu90,
C++
1
int**pointer = &mass[3][3]
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
27.02.2012, 22:59  [ТС]     Как обьявить указатель на двумерный массив? #5
не работает так ошибку выдает
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.02.2012, 23:07     Как обьявить указатель на двумерный массив? #6
Цитата Сообщение от sergeu90 Посмотреть сообщение
а что это такое T_data
Тип данных. Зависит от того, какоц тип имеет ваш массив
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <string.h>
 
int main()
{
    int arr[4][4];
    int** a = arr;
    arr[2][3] = 5;
    printf("%d\n", *(*(arr + 2) + 3));
    return 0;
}
Luke
37 / 37 / 1
Регистрация: 21.02.2012
Сообщений: 95
27.02.2012, 23:12     Как обьявить указатель на двумерный массив? #7
Цитата Сообщение от Luke Посмотреть сообщение
int*pointer = &mass[0][0]
одна звезда лищняя

и если указывать то на начало массива &mass[0][0], а потом работать с ним
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
27.02.2012, 23:13  [ТС]     Как обьявить указатель на двумерный массив? #8
посмотрите я правильно сделал через указатель или нет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
 
void  main()
{
        char s[7][5][8];
 setlocale(LC_ALL,"Russian");
        std::cout << "Исходный массив:" << std::endl;
 
        srand(time(NULL));
 
        for(int m=0;m<7;m++)
        {
                for(int j=0;j<5;j++)
                {
                        for(int k=0;k<8;k++)
                        {
                                *(*(*(s+m)+j)+k)=rand() % 26 + 65;
                                std::cout << std::setw(3) << s[m][j][k];
                        }
 
                        std::cout << std::endl;
                }
 
                std::cout << std::endl;
        }
        std::cout <<"Строки с W: " << std::endl;
 
        for(int m=0;m<7;m++)
                for(int j=0;j<5;j++)
                        for(int k=0;k<8;k++)
                                if(*(*(*(s+m)+j)+k) == 'W')
                                {
                                        for(int i = 0; i < 8; i++)
                                                std::cout << std::setw(3)
                                                          << *(*(*(s+m)+j)+i);
 
                                        std::cout << std::endl;
 
                                        k = 8;
                                }
 
        system("pause");
}
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.02.2012, 23:21     Как обьявить указатель на двумерный массив? #9
Объявления указателя не увидел. А так вроде все нормально, за исключением 2-х моментов
Цитата Сообщение от sergeu90 Посмотреть сообщение
s[m][j][k]
Намеренно оставили обычную индексацию?

Цитата Сообщение от sergeu90 Посмотреть сообщение
k = 8;
break вместо этого.
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
27.02.2012, 23:22  [ТС]     Как обьявить указатель на двумерный массив? #10
я не могу понять как сделать по аналогии указатель на 3-х мерный массив че то не хочеот так ошибку выдает подскажите как правильно
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.02.2012, 23:25     Как обьявить указатель на двумерный массив? #11
Из ошибок только void main()

Добавлено через 1 минуту
Цитата Сообщение от sergeu90 Посмотреть сообщение
я не могу понять как сделать по аналогии указатель на 3-х мерный массив
C
1
char*** ptr = s
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
27.02.2012, 23:37  [ТС]     Как обьявить указатель на двумерный массив? #12
так я так делал не хоччет проходить

Добавлено через 37 секунд
3 IntelliSense: значение типа "char (*)[5][8]" нельзя использовать для инициализации сущности типа "char ***" e:\бнту\основы алгоритмизации\2 семестр\laba-3\laba-1\laba-1.cpp 9 17 laba-1
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.02.2012, 23:56     Как обьявить указатель на двумерный массив? #13
Да, точно, это же статические. Тогда так
C++
1
2
3
4
5
6
int main()
{
    int arr[4][4][4];
    int (*a)[4][4] = arr;
    return 0;
}
Luke
37 / 37 / 1
Регистрация: 21.02.2012
Сообщений: 95
28.02.2012, 00:15     Как обьявить указатель на двумерный массив? #14
sergeu90, самое главное понять самую важную вещь. в С++ многомерные массивы - не настоящие. они все равно представляют собой одномерный массив.
например int [2][2][2]; все равно будет как int [8] в памяти лежать, а первая запись лишь языковая форма вводящая новый тип. поняв это ты придешь к простой истине, что имея указатель на 0-й элемент любого массива ты получаешь начало массива любой размерности.

поэтому int* p = &mass [0][3][5][8]; - будет показывать на определенную точку в этом многомерном массиве а int* p = &mass [0][0][0][0]; гарантирует тебе его начало. а далее игра смещений

иначе будешь использовать синтаксис монстров int (*a)[4][4]
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
28.02.2012, 00:30  [ТС]     Как обьявить указатель на двумерный массив? #15
а с символьным как просто не хочет все равно
char s[7][5][8],
char (*a)[4][4] = s; вот так

Добавлено через 12 минут
все заработало а можете обьяснить эту вот запись

Добавлено через 20 секунд
int (*a)[4][4] = arr;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2015, 00:58     Как обьявить указатель на двумерный массив?
Еще ссылки по теме:

C++ Указатель на двумерный массив
C++ Как обьявить массив неизвестного размера?
C++ Указатель на двумерный массив
Указатель на двумерный массив символов C++
C++ Двумерный массив через указатель

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

Или воспользуйтесь поиском по форуму:
Iridiscent
18 / 18 / 7
Регистрация: 20.04.2015
Сообщений: 108
27.04.2015, 00:58     Как обьявить указатель на двумерный массив? #16
следуя совету Luke сделал вот такой указатель. функции просто нужно передать указатель на начало и размеры массива ^_^
C++
1
2
3
4
5
6
const int h=10,l=10;
    int mass[h][l];
    int *p=&mass[0][0];
 x=6;y=9;
   
    cout<< *(p+x)+(y*l); //еквивалент mass[y][x]
Yandex
Объявления
27.04.2015, 00:58     Как обьявить указатель на двумерный массив?
Ответ Создать тему
Опции темы

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