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

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

Войти
Регистрация
Восстановить пароль
 
AnreyKazakov
Заблокирован
#1

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

15.09.2012, 22:24. Просмотров 693. Ответов 8
Метки нет (Все метки)

Чет связь больно близкая, по моему указатель когда указываешь на массив, он превращается в массив, только безразмерный.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
# include <iostream>
int main(){
int array[10]={5,6,8,3,23,23,23,4,23,32};
int* q=array;
std::cout<<q[5]<<std::endl;
std::cout<<array[5]<<std::endl;
int arr[10]={2,45,65,34,23,7,89,43,5,99};
std::cout<<*(arr+5)<<std::endl;
std::cout<<*arr<<std::endl;
*arr=*q;
//arr=q;
return 0;
}
Жаль, что так нельзя arr=q;

Добавлено через 7 минут
А по делу... Подскажите, пожалуйста, как на двухмерные массивы указатели объявлять? Понимаю что типа int (*q)[10]; (массив 10 на 10) но вот как он указывает?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2012, 22:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как объявлять указатели на двухмерные массивы? (C++):

Указатели на функцию - как их использовать, как объявлять - C++
читаю книжку и столкнулся с указателями на функцию. автор пробегается в несколько страниц по ним, как их использовать, как объявлять. Но...

двухмерные и трёхмерные массивы - C++
работа с двухмерными и трёх мерными массивами(индексами и указателями)...что рассказать преподу и какую прогу написать? :help: ...

двухмерные массивы, сортировка - C++
дана матрица. найти макс елемент на главной диагонале и отсортировать елемент строки матрицы, строку дает пользователь. Неполучается...

Функции, двухмерные массивы - C++
Почему не работает функция#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int matruca(int a, int m, int n ) {for...

Отсортировать массив и вывести на экран (массивы и указатели на указатели) - C++
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F студента. Отсортировать массив S по...

двухмерные массивы (Сформулировать вектор) - C++
Дан массив А(n,n).Сформулировать вектор B(k) из a(i,j)&lt;0. На печать вывести исходный массив, полученный вектор и его размерность.

8
DiffEreD
1435 / 772 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
15.09.2012, 22:28 #2
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
как на двухмерные массивы указатели объявлять?
int** arr;
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
16.09.2012, 10:54 #3
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
Жаль, что так нельзя arr=q;
есть memcpy()

Цитата Сообщение от AnreyKazakov Посмотреть сообщение
Понимаю что типа int (*q)[10]; (массив 10 на 10) но вот как он указывает?
его шаг равен десяти элементам
q[0] - первые десять
q[1] - вторые десять
q[1][0] - первый элемент из вторых десяти
1
AnreyKazakov
Заблокирован
16.09.2012, 22:02  [ТС] #4
Ну а если объявить
int array[3][3]={{1,2,3},{23,32,25},{7,77,777}};
int (*q)[3]=array;
int* w=q;
Почему-то последняя строчка не присваивается...
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
17.09.2012, 01:56 #5
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
Почему-то последняя строчка не присваивается...
они разных типов

C
1
int *w = q[0];
C
1
int *w = (int *) q;
1
Topotun
89 / 48 / 7
Регистрация: 16.09.2012
Сообщений: 207
17.09.2012, 03:03 #6
C++
1
2
3
4
5
6
7
double *arr = new double[10]; //Массив одномерный 10 чисел
//Массив двумерный (матрица) 10х10 чисел. 
double **arr2 = new double*[10];
for(int i = 0; i < 10; i++)
{
     arr2[i] = new double[10];
}
Чет связь больно близкая, по моему указатель когда указываешь на массив, он превращается в массив, только безразмерный.
Связь близкая, но в тоже время далёкая. Указатель на массив это не безразмерный массив и это вообще не массив и даже близко нету к массиву. Указатель на массив хранит в себе АДРЕС первого элемента массива. Зная адрес первой ячейки массива, можно уже с помощью итератора переходить по остальным элементам. Объявляя массив (не указатель), память сразу же резервируется под необходимые элементы, а создавая указатель, память можно динамически варьировать, в зависимости от того, сколько нам нужно под конкретную задачу.
0
AnreyKazakov
Заблокирован
17.09.2012, 09:58  [ТС] #7
Цитата Сообщение от accept Посмотреть сообщение
1
int *w = (int *) q;
Вот так получилось объявить
C++
1
2
3
4
5
6
7
8
#include <iostream>
int main(){
    using std::cout;using std::cin;using std::endl;
    int array[3][3]={{1,2,3},{23,32,25},{7,77,777}};
    int (*q)[3]=array;
    int* w=(int*)q;
    cout<<w[2]<<endl;
    }
Но, сколько не прибавляешь ++q , значение *w не изменяется, то есть
q=0;// а *w=1;
++q;// а *w все равно равно 1
int* w=(int*)q; не совсем понял, что означает это присваивание....

Цитата Сообщение от Topotun Посмотреть сообщение
double *arr = new double[10];
это я понял, объявили динамически массив из 10 элементов
Цитата Сообщение от Topotun Посмотреть сообщение
double **arr2 = new double*[10];
А вотэто нифига не понятно **arr2 - т к две звездочки, значит arr2 указатель на указатель, new double объявляем динамически... а что объявляем? вот это... *[10] - и тут я вообще теряюсь в догатках, самым логичным предположением было то, что arr - указатель на массив указателей из 10 элементов каждый (с шагом в 10)
тогда что в этом цикле ?
Цитата Сообщение от Topotun Посмотреть сообщение
for(int i = 0; i < 10; i++)
{
* * *arr2[i] = new double[10];
}
Здесь объявляются 10 указателей на массивы из 10 элементов?, а они разве не создались здесь автоматом? **arr2 = new double*[10]; ???
Вот такие вот вопросы........... =(
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
17.09.2012, 10:42 #8
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
Но, сколько не прибавляешь ++q , значение *w не изменяется
указатель - это обычная переменная, в которой хранится число типа "адрес"
++q равно q = q + 1 - в q записывается новый адрес

w и q никак не связаны, в них просто хранится один и тот же адрес

Цитата Сообщение от AnreyKazakov Посмотреть сообщение
не совсем понял, что означает это присваивание
там операция приведения типа (в C++ используются операторы с суффиксом cast)
тип данных из переменной-указателя приводится к нужному, и эти данные помещаются в новую переменную-указатель

C++
1
int *arr[10];
это массив из десяти указателей
1
co6ak
Кошковед
514 / 502 / 30
Регистрация: 12.04.2010
Сообщений: 1,392
17.09.2012, 12:25 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
Вот так получилось объявить
А вотэто нифига не понятно **arr2 - т к две звездочки, значит arr2 указатель на указатель, new double объявляем динамически... а что объявляем? вот это... *[10] - и тут я вообще теряюсь в догатках, самым логичным предположением было то, что arr - указатель на массив указателей из 10 элементов каждый (с шагом в 10)
тогда что в этом цикле ?

Здесь объявляются 10 указателей на массивы из 10 элементов?, а они разве не создались здесь автоматом? **arr2 = new double*[10]; ???
Вот такие вот вопросы........... =(
нет, не создались.

матрица это массив массивов.
в цикле этом:
C++
1
2
3
4
for(int i = 0; i < 10; i++)
{
*arr2[i] = new double [10]; // так будет правильнее
}
ты указываешь компухтеру, что в каждой ячейки твоего созданного, еще пока одномерного массива, будут еще массивы указателей. и на выходе получишь матрицу
1
17.09.2012, 12:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2012, 12:25
Привет! Вот еще темы с ответами:

Двухмерные массивы(матрица символов) - C++
Вывести для каждой строки и каждого столбца символ который колличественно преобладает. В том случае если таких символов нет то вывести...

Одномерные и двухмерные массивы, набрать код - C++
Помогите решить задачи на массивы С++ На начальном уровне С++ без принт *. Буду очень благодарен 1)Дана матрица A(n,n). Получить...

Двухмерные массивы: Вычисление сумм элементов - C++
Здравствуйте, дорогие форумчане. ----------------------------------- Помогите, пожалуйста, решить задачу. Даны действительные числа...

Двухмерные массивы. Нахождение min значения в каждой строке. - C++
Помогите решить задачу. Дана матрица ахв, найти минимальное значение в каждой строке. не понять мне как присвоить найденное...


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

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

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