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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
denys_l
52 / 52 / 4
Регистрация: 26.09.2011
Сообщений: 186
#1

Вывод двумерного массива через указатель - C++

02.02.2012, 00:35. Просмотров 2173. Ответов 3
Метки нет (Все метки)

в пятой главе Прохоренка приведен такой фрагмент кода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
int main()
{
   const short ROWS = 4, COLS = 5;
   int arr[ROWS] [COLS] = {
   {1,2,3,4,5},
   {6,7,8,9,20},
   {11,12,13,14,15},
   {16,17,18,19,20}
   };
   for (int *p=arr[0]; p < arr[0]+ROWS*COLS; ++p)
   cout << *p<< endl;
}
я абсолютно не понимаю, что говорится в строке
C++
1
for (int *p=arr[0]; p < arr[0]+ROWS*COLS; ++p)
получается, что в цикле фор создается указатель на целочисленнй тип данных и инициализируется адресом первого элемента массива arr. Почему запись в данной случае имеет вид
C++
1
=arr[0]
почему не
C++
1
=arr
Затем, что у нас в условии ? - p < arr[0]+ROWS*COLS
что в p и с чем оно сравнивается
Что такое ROWS*COLS и к чему оно прибавляется?
Спасибо
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2012, 00:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод двумерного массива через указатель (C++):

Вывод двумерного массива на экран, переданного через указатель - C++
Выводит совсем не то, что нужно исправить в функции вывода ? // labrab2.12.cpp: определяет точку входа для консольного приложения. // ...

Создание функции инициализации двумерного массива строк через указатель - C++
Здравствуйте,имеется двумерный массив: in_data_up=_T(&quot;00&quot;); in_data_up=_T(&quot;01&quot;); ...

Функции двумерного массива. Транспонировать матрицу через ввод вывод функции двумерного массива. - C++
Транспонировать матрицу через ввод вывод функции двумерного массива.Сначала вывести ее,а потом провести транспонирование.

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

Приведение любого двумерного массива к типу указатель на указатель - C++
Допустим, есть несколько массивов int arr1; int arr2; int arr3; Какое преобразование нужно сделать, чтобы подобные присвоения...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6467 / 3115 / 306
Регистрация: 04.12.2011
Сообщений: 8,589
Записей в блоге: 4
02.02.2012, 01:17 #2
denys:
C++
1
2
1
=arr[0]
почему не
C++
1
2
1
=arr
Это все равно - указатель на 1-й элемент и указатель на массив (имя) просто равны.
Что касается адресной арифметики то:
int arr[]={1,2,3,...,20};
int *p=arr;
cout<<*p;//p - адрес первого элемента *p - первый элемент
cout<<*(p+1);//адрес первого элементa p увеличивается на размер int, и указывает на 2-й элемент
то есть если p сравнивается с адресом arr[0]+20, то компилятор сравнивает его с указателем который "правее" на 20 размеров int от начала массива...
то есть до конца.
0
NoMasters
Псевдослучайный
1754 / 1097 / 72
Регистрация: 13.09.2011
Сообщений: 3,134
02.02.2012, 01:25 #3
denys_l, массив двумерный, arr[0] будет просто адресом первого элемента. В условии обычная адресная арифметика, выражение справа дает адрес элемента за концом массива. Но вообще сравнивать указатели — извращение.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Мне неясно почему ++p а не p++? Вроде пропускается элемент с индексом 0, т.е адресом p ...
Преобразование в любом случае выполняется в конце очередной итерации.
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6467 / 3115 / 306
Регистрация: 04.12.2011
Сообщений: 8,589
Записей в блоге: 4
02.02.2012, 01:38 #4
Цитата Сообщение от NoMasters Посмотреть сообщение
Преобразование в любом случае выполняется в конце очередной итерации.
И в самом деле, - забавно. Ни-когда и в голову не приходило попробовать
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2012, 01:38
Привет! Вот еще темы с ответами:

Вывод динамического двумерного массива через функцию - C++
Имею следующий код: void matrix_output (int **matrix, int N) { for (int i=0; i&lt;N; i++) { for...

Не работает вывод двумерного массива через метод класса - C++
При обращении к методу getStringSymbol и getAllStrings прога вылетает, помогите пожалуйста #include &quot;stdafx.h&quot; #include &quot;iostream&quot; ...

Передача массива через указатель - C++
Надо передать массив в функцию через указатель, я сделал, так но что то программа долго думаете #include &lt;iostream&gt; #include ...

Доступ к элементу массива через указатель - C++
надо осушествить следуюшие: pointerArr=21; когда: main.cpp #include &lt;QtCore/QCoreApplication&gt; #include &quot;Array.h&quot; #include...


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

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

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