Аватар для Enflamed
3 / 3 / 1
Регистрация: 12.04.2015
Сообщений: 74

Как работает массив указателей на строки двумерного массива?

26.10.2015, 06:06. Показов 1940. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть работающий код:
code
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
void main()
{
int matrix[3][5];
 
for(i = 0; i < 3; i++)
{
   for(int j = 0; j < 5; j++)
   {
       matrix[i][j] = rand % 100;
       cout << matrix[i][j]<<"\t";
   }
       cout<<endl;
}
 
cout << "\n\n";
 
int *ptr[3];
 
for(int i =0; i  < 3; i++)
   ptr[i] = matrix[i];
 
for(i = 0; i < 3; i++)
{
   for(int j = 0; j < 5; j++)
   {
       cout << ptr[i][j]<<"\t";
   }
       cout<<endl;
}
 
}


Не понятна строка 26:

C++
1
2
3
   {
       cout << ptr[i][j]<<"\t";
   }
Основной вопрос в том, как получается двумерный массив ptr[i][j], если мы объявили одномерный массив int *ptr[3].

Добавлено через 2 часа 16 минут
А если точнее: как мы можем обратиться к элементу ptr[i][j], если у нас существует только указатель на строку? Но этот указатель не является массивом, но мы обращаемся к этому указателю, как будто это одномерный массив
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.10.2015, 06:06
Ответы с готовыми решениями:

Не работает программа сортировки строк с помощью двумерного массива указателей
Не работает программа сортировки строк с помощью двумерного массива указателей. Не подскажете где ошибка? #include...

Обмен элементов двумерного динамического массива через массив указателей
Собственно сабж. Есть задание: Есть код: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; void func(int **a){ int **b=new...

Как записать в массив число номера строки двумерного массива?
Как в массив g записать как число, любой один индекс i массива a? g:=любой один индекс I a Тоесть если a, i - это индекс 2, то первый...

2
Модератор
Эксперт С++
 Аватар для zss
13781 / 10974 / 6491
Регистрация: 18.12.2011
Сообщений: 29,259
26.10.2015, 07:36
C++
1
2
3
4
5
6
7
8
int *ptr[3]; // массив указателей на строки
// ptr[0] - адрес 0 строки
// ptr[1] - адрес 1 строки
// ptr[2] - адрес 2 строки
for(int i =0; i  < 3; i++)
    ptr[i] = matrix[i]; // переписываем адреса строк в ptr
...
 cout << ptr[i][j]<<"\t"; // зная адрес i строки находим в ней j элемент
Кстати, я не уверен, что любой компилятор для статического массива matrix обязан matrix[i] считать адресом i строки.
Но для динамических массивов это именно так.
Кроме того, для динамических массивов строки можно переставлять просто переставляя их адреса.
А значения matrix[i] менять нельзя.
0
 Аватар для Enflamed
3 / 3 / 1
Регистрация: 12.04.2015
Сообщений: 74
26.10.2015, 09:21  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
// зная адрес i строки находим в ней j элемент
2 часа теребил эту тему и вроде понял, что произошло.
У нас ведь строка - это отдельный массив, и мы присвоили этот массив указателю.
А сам указатель можно использовать как массив, верно?

То есть обращаться к элементу можно через указатель по его индексу, даже если указатель сам со себе является просто переменной, содержащей адрес нулевого элемента
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.10.2015, 09:21
Помогаю со студенческими работами здесь

Составить программу, в которой создать динамический массив указателей для сохранения двумерного массива В с N × N целых
Составить программу, в которой создать динамический массив указателей для сохранения двумерного массива В с N × N целых чисел,...

Как выделить память для двумерного массива указателей в куче?
Есть массив вида: unsigned char *ddtКак выделить память для такого массива в куче? Должен получиться двумерный массив указателей. Сами...

Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей
Нужно создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей. Эта специализация...

Как работает массив указателей на функцию?
void (*ysl_tab ) (float, float *) = {ysl1, ysl2, ysl3, ysl4}; if (YSL == 1) { for (int j = 0; j &lt; 4; j ++) tab = 0; //тут...

Освобождение указателей двумерного массив.
Возникает ошибка времени выполнения при освобождении. Что не так? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace...


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

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

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru