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

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

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

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

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

обьясните на примере как обьявить указатель на двумерный массив и потом обращаться к элементам через указатель
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2012, 22:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как обьявить указатель на двумерный массив? (C++):

Как правильно передать в функцию указатель на двумерный массив? - C++
Сабж #include <windows.h> #include <stdio.h> using namespace std; //ОТ безысходности сделал матрицу глобальной int A = {2,...

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

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

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

Указатель на двумерный массив - C++
Как сделать то же самое с двумерным массивом? Как работать с двумерными или n- мерными массивами через указатель? #include <iostream> ...

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

15
soon
2541 / 1306 / 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 */
0
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
27.02.2012, 22:21  [ТС] #3
а что это такое T_data
как создать указатель на например int mas[3][3]
0
Luke
39 / 39 / 1
Регистрация: 21.02.2012
Сообщений: 95
27.02.2012, 22:32 #4
sergeu90,
C++
1
int**pointer = &mass[3][3]
2
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
27.02.2012, 22:59  [ТС] #5
не работает так ошибку выдает
0
soon
2541 / 1306 / 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;
}
1
Luke
39 / 39 / 1
Регистрация: 21.02.2012
Сообщений: 95
27.02.2012, 23:12 #7
Цитата Сообщение от Luke Посмотреть сообщение
int*pointer = &mass[0][0]
одна звезда лищняя

и если указывать то на начало массива &mass[0][0], а потом работать с ним
1
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");
}
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.02.2012, 23:21 #9
Объявления указателя не увидел. А так вроде все нормально, за исключением 2-х моментов
Цитата Сообщение от sergeu90 Посмотреть сообщение
s[m][j][k]
Намеренно оставили обычную индексацию?

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

Добавлено через 1 минуту
Цитата Сообщение от sergeu90 Посмотреть сообщение
я не могу понять как сделать по аналогии указатель на 3-х мерный массив
C
1
char*** ptr = s
0
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
0
soon
2541 / 1306 / 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;
}
1
Luke
39 / 39 / 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]
2
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;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2012, 00:30
Привет! Вот еще темы с ответами:

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

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

Как обьявить массив неизвестного размера? - C++
Помогите разобраться, есть класс, в котором обьявлен двумерный массив структур. Размер массива неизвестен, но должен быть определен во...

Двумерный массив через указатель - C++
как вывести двумерный массив через указатель? с одномерным понятно,а как так же с двумерным сделать? int a = { 1, 2, 3, 4, 5 }; ...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
28.02.2012, 00:30
Ответ Создать тему
Опции темы

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