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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.88
NikITKA123
19 / 18 / 1
Регистрация: 28.04.2010
Сообщений: 86
#1

Как создать динамический массив размерностью m на n? - C++

12.11.2010, 17:19. Просмотров 3154. Ответов 20
Метки нет (Все метки)

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

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

Как создать динамический массив типа string? Как создать класс такого массива? - C++
Как создать динамический массив типа string? Как создать класс такого массива? =-O Помогите, пожалуйста, очень нужна помощь!

Массив и память. Как создать динамический массив? - C++
не могу исправить ошибки. И нужен динамический массив я что-то попробовала для его создания но ничего не вышло #include "stdafx.h" ...

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

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

Как создать динамический массив строк? - C++
Делаю лабораторную и пока только разбираюсь, как создать динамический массив строк Написал вот это, но при печати строки появляется...

20
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.11.2010, 17:29 #2
Покажите Ваш вариант n*n (а то непонятно какой язык) - тогда покажу как создавать m*n
1
NikITKA123
19 / 18 / 1
Регистрация: 28.04.2010
Сообщений: 86
12.11.2010, 17:49  [ТС] #3
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Покажите Ваш вариант n*n (а то непонятно какой язык) - тогда покажу как создавать m*n
cin >> n;
int **a = new int *[n];
for(int i = 0; i < n; i++)
a[i] = new int [n];
1
Don Vito
9 / 9 / 1
Регистрация: 22.11.2009
Сообщений: 162
12.11.2010, 17:51 #4
наверное так же...
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.11.2010, 17:53 #5
Тогда m на n будет так:
C++
1
2
3
4
cin >> m>>n;
int **a = new int *[m];
for(int i = 0; i < m; i++)
a[i] = new int [n];
2
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
14.11.2010, 00:26 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
вот на чистом Си, если кому интересно
C
1
2
3
4
5
6
7
8
9
10
11
12
13
int m, n;
    int **vect;
 
    printf("Input m:");
    scanf("%d", &m);
    printf("Input n:");
    scanf("%d", &n);
 
if (!(vect = (int** ) malloc(m * sizeof(int*))))
        printf("Allocate error");
 
    for (int i = 0; i < m; ++i)
        vect[i] = (int *) malloc(n * sizeof(int));
1
Don Vito
9 / 9 / 1
Регистрация: 22.11.2009
Сообщений: 162
15.11.2010, 19:41 #7
А вот так можно обраться к элементу ?

C++
1
cout << arr[n][m];
0
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
15.11.2010, 19:45 #8
Нет нельзя. Если n и m это размерность матрицы. Это выход за пределы.
1
Don Vito
9 / 9 / 1
Регистрация: 22.11.2009
Сообщений: 162
15.11.2010, 19:53 #9
Если
double ** Arr;
размерность n+1, m+1;

такое выражение Arr[n][m] - будет корректно?

Добавлено через 4 минуты
Вообщем, как обратиться к n*m -ому элменту массива через указатель, не разыменовывая его?
0
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
15.11.2010, 20:00 #10
Цитата Сообщение от Don Vito Посмотреть сообщение
А вот так можно обраться к элементу ?
думаю разницы нет с С++..
в Си можно если arr у тебя массив m * n, в даном случае если память выделять динамически arr - будет указателем на указатель.
В Си как известно выражение типа arr[n][m] компилятором будет преобразовано в *(*(arr + n) + m)
то есть с помощью адресной арифметики мы сначало проходимся по "верхнему массиву указателей"
arr[n] (эквивалентно *(arr + n)), так как каждый элемент этого массива является указателем на массив простого типа
далее мы идем по верхнему массиву arr[n][m] (эквивалентно *(*(arr + n) + m))

Тут главное помнить что двумерные массивы(и по аналогии многомерные) в Си являются массивами массивов

Добавлено через 1 минуту
Цитата Сообщение от Don Vito Посмотреть сообщение
Вообщем, как обратиться к n*m -ому элменту массива через указатель, не разыменовывая его?
массив статический или динамический?
с помощью
C
1
double ** Arr;
ты хочешь сослаться на статический массив или динамический?
если динамический смотри мой пост
1
Don Vito
9 / 9 / 1
Регистрация: 22.11.2009
Сообщений: 162
15.11.2010, 20:02 #11
Спасибо за ответ!

Есть ли смысл заполнять нулями массив и в каких случаях это делается?

Добавлено через 1 минуту
Речь о двумерном динамически созданном...
0
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
15.11.2010, 20:10 #12
Цитата Сообщение от Don Vito Посмотреть сообщение
Есть ли смысл заполнять нулями массив и в каких случаях это делается?
если ты не собираешься читать с него раньше чем записывать(кстати, это плохо) в него то не нужно, вот когда будешь забивать значения оно само перезапишется
1
Don Vito
9 / 9 / 1
Регистрация: 22.11.2009
Сообщений: 162
15.11.2010, 20:17 #13
Там memset(); вроде бы как то по хитрому нужно вызывать, да?
Если просто вызывать memset(); то адресса во второй размерности затираются, так что ли?
0
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
15.11.2010, 20:30 #14
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Don Vito Посмотреть сообщение
Там memset(); вроде бы как то по хитрому нужно вызывать, да?
Если просто вызывать memset(); то адресса во второй размерности затираются, так что ли?
можно но если честно это лишний геморой она предназначена в основном для копирования символов так как берет младший байт только(прочитай описание про нее), сначала надо мемсет вызвать для верхнего массива, а потом для верхнего, вот к примеру будет проще:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    int m = 3, n = 5;
    int **vect;
    int **a;
 
    // Allocating memory for m * n
    if (!(vect = (int** ) malloc(m * sizeof(int*))))
        exit(1);
 
    for (int i = 0; i < m; ++i)
        if(!(vect[i] = (int *) malloc(n * sizeof(int))))
            exit(1);
 
    // Input Elements of m * n
    for (int i = 0; i < m; ++i)
        for (int j = 0; j < n; ++j)
            vect[i][j] = 10 * i + j;
 
    for (int i = 0; i < m; ++i)
        for (int j = 0; j < n; ++j)
            printf((j != n - 1) ? "%d " : "%d\n", vect[i][j]);
 
    printf("\n\n");
если хочешь действительно разобраться хоть немного в указателях протести эту прогу и подумай чего она выводит массив 5 на 3 а не 3 на 5, а потом попробуй задать хотябы нули для этой матрицы только через мемсет

Добавлено через 1 минуту
Цитата Сообщение от norge_goth Посмотреть сообщение
Там memset()
если ты конечно имеешь ввиду инициализацию
1
Don Vito
9 / 9 / 1
Регистрация: 22.11.2009
Сообщений: 162
15.11.2010, 20:37 #15
Спасибо, обещаю покавырться в этом коде в доль и поперек
0
15.11.2010, 20:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2010, 20:37
Привет! Вот еще темы с ответами:

Как создать динамический двумерный массив - C++
Можно ли создать на С++ динамический двухмерный масив? Как? int z , x ; cin &gt;&gt; z ; cin &gt;&gt; x ; int *arr = new int(z); int *arr1...

Как создать динамический массив структур? - C++
А как работать с вектором если я хочу динамический массив структур? т.е. допустим struct tovar { string name; int cost; ...

Как создать динамический двумерный массив - C++
Динамический одномерный массив p можно сождать примерно так: int N, *p; cin &gt;&gt; N; p= new int А как создать динамический...

Как правильно создать динамический массив из функции - C++
Вот так ругается компилятор: int** i_matrix; f(i_matrix,N, M); ............................................. void f(int**...


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

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

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