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

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

Войти
Регистрация
Восстановить пароль
 
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
#1

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

22.10.2012, 20:50. Просмотров 1159. Ответов 7
Метки нет (Все метки)

Добрый вечер.
Допустим у меня есть матрица:
C
1
int a[n][m];
и указатель на указатель:
C
1
int **pp;
Как мне указателю pp присвоить адрес матрицы?
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2012, 20:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель на матрицу (C++):

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

Матрица в классе, указатель на матрицу. - C++
Здравствуйте. Помогите, пожалуйста, с матрицей в классе. Вот то, что накалякал я. Matrix.h: class Matrix{ private: int n,m; ...

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
22.10.2012, 21:54 #2
C++
1
2
3
4
5
6
7
8
for(n=0;n<4;n++){
p=a[i]; //указателю р присваивается адрес первого элемента строки с номером i
for(m=0;m<4;m++){
*(p+m)=4*i+j+1;//адрес элемента m то есть адрес a[n][m]
 
cout <<a[n][m]}
cout <<"\n";
}
yleart
60 / 45 / 1
Регистрация: 07.10.2011
Сообщений: 139
22.10.2012, 22:47 #3
Цитата Сообщение от Евгений89 Посмотреть сообщение
p=a[i]; //указателю р присваивается адрес первого элемента строки с номером i
Точно адрес? Не значение?
MrGrig
23.10.2012, 10:55
  #4

Не по теме:

по мне так проще фигней такой не страдать указателю выделять память...

PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
23.10.2012, 18:36  [ТС] #5
Евгений89 , откуда взялось n<4? Уточню вопрос: если исп. одномерный массив, то после p=&arr[0];
(p - указатель) с массивом arr можно будет работать только через указатель p; как достичь того же, но только в случае с матрицами(сколько раз и в каком порядке применять операции *, &, [] к arr)?
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
23.10.2012, 18:46 #6
если массив одномерный
int a[N],
то имя массива a - адрес первого элемента,
a + i - адрес i-го элемента массива
*(a+i) - значение i-го элемента (эквивалентно a[i])

Двумерный массив int a[M][N] является одномерным массивом, каждый элемент которого является массивом типа int размера N. Поэтому
a[i] - адрес начала i-ой строки массива int a[M][N], то есть со строками можно работать как с одномерными массивами.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
23.10.2012, 18:50 #7
Надо по-особому определять указатель.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
#define N 2
#define M 3
 
int main()
{
    int a[N][M] = { {1, 2, 3}, {4, 5, 6} };
    int (*p)[M] = a;
    
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < M; ++j) {
            printf("%d ", p[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}
int **p не прокатит для статических двумерных массивов. Как для динамических уже показано выше.
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
23.10.2012, 18:52 #8
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Надо по-особому определять указатель.
именно так, с учетом того, что это массив массивов. при этом соблюсти приоритет операций, поставить скобочку правильно. А вообще некоторые простые трюки с двумерными массивами можно здесь посмотреть (в последних постах):

Дан двумерный массив. Поменять местами 1 и 3 строки
Найти сумму и количество четных чисел матрицы, меньших 10
и высший пилотаж
Удаление нулевой(-ых) строчки и столбца из матрицы
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2012, 18:52
Привет! Вот еще темы с ответами:

Функция, получающая указатель на обычную функцию, получает указатель на метод класса - C++
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и...

Как правильно удалять выделенную память под указатель на указатель? - C++
есть код #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; using namespace std; void sort_1(const...

Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель - C++
Всем привет, встретил в книге такой пример добавления узла в дерево: typedef struct tree { int data; tree *left, *right,...

Зачем нужен указатель на указатель при работе с однонаправленным списком? - C++
День добрый. Столкнулся с непониманием этой темы. В частности, совершенно непонятен алгоритм инициализации такого вот списка. Например:...


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

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

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