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

Указатель на матрицу

21.09.2014, 04:14. Просмотров 630. Ответов 7
Метки нет (Все метки)

Привет народ! Объясните, как передать в функцию указатель на матрицу(не на ее элемент, а на саму)? То есть как записать, например, такое:

C++
1
2
3
4
5
6
7
8
9
10
11
int x;
void function(указатель на matrix)
{
     x = элемент из матрицы (например [5][5])
}
int main()
{
     int matrix[10][10];
     function(передаем указатель);
     return 0;
}
и в чем здесь разницу между статичным массивом и динамическом (будет ли отличаться синтаксис)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2014, 04:14
Ответы с готовыми решениями:

Указатель на матрицу
Добрый вечер. Допустим у меня есть матрица: int a; и указатель на указатель: int **pp; Как мне...

Матрица в классе, указатель на матрицу.
Здравствуйте. Помогите, пожалуйста, с матрицей в классе. Вот то, что накалякал я. Matrix.h: class...

Как в функцию передать указатель на матрицу?
Че то я немного туплю, давно с функциями не работал, мне нужно реализовать функцию которая бы...

В main() используя указатель на указатель выделить память и ввести матрицу целых чисел
В main() используя указатель на указатель выделить память и ввести матрицу целых чисел. В функции...

7
1106 / 778 / 218
Регистрация: 15.08.2010
Сообщений: 2,157
21.09.2014, 04:16 2
просто: matrix
0
323 / 293 / 205
Регистрация: 21.02.2013
Сообщений: 707
21.09.2014, 04:28 3
Цитата Сообщение от Антон219 Посмотреть сообщение
void function(указатель на matrix)
C++
1
2
3
4
5
6
7
8
9
10
void function(int matrix[][10])
{
    int x= matrix[5][5];
} 
int main()
{
     int matrix[10][10];
     function(matrix);
     return 0;
}
0
1106 / 778 / 218
Регистрация: 15.08.2010
Сообщений: 2,157
21.09.2014, 04:33 4
jurok_85, проверяйте, пожалуйста, код, перед тем, как постить
0
Модератор
Эксперт С++
10147 / 8497 / 5164
Регистрация: 18.12.2011
Сообщений: 22,734
21.09.2014, 10:49 5
Тот же код с динамическим выделением памяти
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void function(int** m)
{
    int x= m[5][5];
} 
int main()
{
     int** matrix=new int*[10];
     for(int i=0;i<10;i++)
          matrix[i]=new int[10];
     function(matrix);
     for(int i=0;i<10;i++)
          delete[] matrix[i];
     delete[] matrix;
     return 0;
}
2
Комп_Оратор)
Эксперт по математике/физике
8517 / 4275 / 582
Регистрация: 04.12.2011
Сообщений: 12,789
Записей в блоге: 14
21.09.2014, 11:12 6
А если изменить в матрице что-то нужно то указатель на указатель можно передать. 3 звёздочки получается.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
void function(int*** m)
{
   (* m)[5][5]=5;
} 
int main()
{
     int** matrix=new int*[10];
     for(int i=0;i<10;i++)
          matrix[i]=new int[10];
     function(&matrix);
     cout << matrix[5][5];
     for(int i=0;i<10;i++)
          delete[] matrix[i];
     delete[] matrix;
     cin.get();
     return 0;
}
1
Модератор
Эксперт С++
10147 / 8497 / 5164
Регистрация: 18.12.2011
Сообщений: 22,734
21.09.2014, 11:17 7
IGPIGP, Вы переусердствовали. Содержимое матрицы будет меняться и в первом случае.
Указатель на матрицу надо передавать, если мы собираемся менять адрес этой матрицы,
например, если она создается внутри функции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
void function(int*** m)
{
     *m=new int*[10];
     for(int i=0;i<10;i++)
          (*m)[i]=new int[10];
     (* m)[5][5]=5;
} 
int main()
{
     int **matrix;
     function(&matrix);
     cout << matrix[5][5];
     for(int i=0;i<10;i++)
          delete[] matrix[i];
     delete[] matrix;
     cin.get();
     return 0;
}
2
Комп_Оратор)
Эксперт по математике/физике
8517 / 4275 / 582
Регистрация: 04.12.2011
Сообщений: 12,789
Записей в блоге: 14
21.09.2014, 11:46 8
Цитата Сообщение от zss Посмотреть сообщение
Указатель на матрицу надо передавать, если мы собираемся менять адрес этой матрицы,
например, если она создается внутри функции.
Всё верно, это нужно делать если указатель в месте вызова меняет значение или инициализируется. Адрес самих данных остаётся прежним.

Не по теме:

О трёх звёздочках думал больше чем о предмете. :cry:

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.09.2014, 11:46

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Найти матрицу, получающуюся перестановкой столбцов, используя указатель
Дана целочисленная матрица размера m х n. Найти матрицу, получающуюся перестановкой столбцов...

Как получить ссылку на указатель или указатель на указатель в массиве?
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения...

А почему нельзя передавать в ф-ю добавления элемента в стек один указатель? Почему нужен именно указатель на указатель?
Вот код ф-ии добавления элемента в стек: void push1(Node **top, int d) { // top...

Указатель типа void. Использование косвенного связывания через универсальный указатель
Необходимо использовать косвенного связывания через универсальный указатель, примерный вид: struct...


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

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

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