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

Что такое двумерный массив? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Копирую строчки двумерного массива и программа начинает вести себя странно http://www.cyberforum.ru/cpp-beginners/thread341725.html
В общем, есть некоторый полузапиленный код. #include <iostream> #include <cstdlib> #include <stdlib.h> #include <conio.h> #include <time.h> using namespace std; void showmass(int**, int, int); void showmass(int*, int);
C++ При компиляции не может найти хеадер Написал программу.. она пашет, но когда весь код в main.cpp. Решил ее усовершенствовать, чтобы мейн имел красивее вид, сделал вот так: main.cpp: #include <iostream> #include <fstream> #include "clRead.h" int main(){ ifstream iF("One.txt", ios::in); http://www.cyberforum.ru/cpp-beginners/thread341692.html
Бот C++
Порекомендуйте библиотеки для имитации нажатия клавиш, кнопок мыши и анализа пикселей с экрана. Хочу написать простенького бота для онлайн игры.
Как убрать знак минус C++
У меня int a = -7. Как программно получить a = 7?
C++ Пояснить про const в возвращаемом типе функции http://www.cyberforum.ru/cpp-beginners/thread341679.html
когда может понадобится написать такое: const int func(int i) { return i+5; } вопрос конкретно за const
C++ Кольсольное приложение win32 или CLR Привет Возникла делема помогите советом. язык C++ где лучше писать на консольном приложении win32 или на консольном приложении CLR ? Если есть ещё кроме них какие то варианты то буду рад их посмотреть. подробнее

Показать сообщение отдельно
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
13.08.2011, 23:24     Что такое двумерный массив?
Не буду долго объяснять мотивы subj-а, но не получается организовать работу с матрицей как с массивом векторов.

Пытаюсь написать цикл просмотра массива с использованием указателя на элемент в качестве счетчика.

Для вектора
C++
1
2
int b[5]={1,2,3,4,5};
for (int *i=b; i<b+5; ++i) std::cout<<*i<<' ';
Для матрицы, если считать что структура представлена вектором в котором строки последовательно сомкнуты, получается так
C++
1
2
3
4
5
int a[3][5]={{11,12,13,14,15},{21,22,23,24,25},{31,32,33,34,35}};
for (int *i=*a; i<*(a+3); i+=5)
{ for (int j=0; j<5; ++j) std::cout<<*(i+j)<<' ';
  std::cout<<std::endl;
}
это не устраивает тем, что счетчик-указатель внешнего цикла указывает на элемент матрицы (int *), а не на строки, и требуется приращение 5 (длинна строк), а не 1.

Пытаюсь написать
C++
1
2
3
4
5
int a[3][5]={{11,12,13,14,15},{21,22,23,24,25},{31,32,33,34,35}};
for (int **i=a; i<a+3; i+=1)
{ for (int *j=*i; j<*i+5; ++j) std::cout<<*j<<' ';
  std::cout<<std::endl;
}
test.cpp:57: error: cannot convert 'int (*)[5]' to 'int**' in initialization
test.cpp:57: error: comparison between distinct pointer types 'int**' and 'int (*)[5]' lacks a cast
57 строка в файле == 2 строка в примере.

Не понимаю, почему указатель совместим с вектором, а указатель-на-указатель не совместим с указатель-на-вектор?
Из этого следует сделать вывод, что n-мерный массив - это n-мерный массив, а не вектор (n-1)-мерных массивов!? Косвенно это подтверждается тем, что sizeof от матрицы пропорционален размеру матрицы, т.е. указателей на строки не создаётся.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru