Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2009, 15:06   #1
forsaken66
Куды бечь?
Форумчанин
 
Аватар для forsaken66
 
Регистрация: 05.10.2009
Сообщений: 104
Вопрос Вопрос по С++ (массивы)

Извините, вопрос мелочный, но я не знаю как его решить. Суть: юзер вводит с клавиатуры целое число х. Затем в программе нужно создать массив а[x]. Так вот, как? Насколько знаю(а знаю я не очень) нужно применять динамический массив? Оъясните пожалуйста.
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.
forsaken66 вне форума Ответить с цитированием
Старый 05.10.2009, 15:12   #2
mYziK
Пользователь
 
Регистрация: 18.09.2009
Сообщений: 38
По умолчанию

объявляй указатель
int *a; //int - тип, ставишь свой

дальше считываешь x (либо scanf, либо std::cin)

выделяешь память:
a = new int[x];

не забудь освободить (когда закончил работать с массивом)
delete [] a;
mYziK вне форума Ответить с цитированием
Старый 05.10.2009, 15:17   #3
forsaken66
Куды бечь?
Форумчанин
 
Аватар для forsaken66
 
Регистрация: 05.10.2009
Сообщений: 104
По умолчанию

Цитата:
Сообщение от mYziK Посмотреть сообщение
объявляй указатель
int *a; //int - тип, ставишь свой

дальше считываешь x (либо scanf, либо std::cin)

выделяешь память:
a = new int[x];
Спасибо большое! И после этого можно работать с ним как с обычным статическим массивом?
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.
forsaken66 вне форума Ответить с цитированием
Старый 05.10.2009, 17:23   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от forsaken66
И после этого можно работать с ним как с обычным статическим массивом?
Да, можно. Хотя некоторые отличия, все-таки, есть.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 05.10.2009, 17:44   #5
forsaken66
Куды бечь?
Форумчанин
 
Аватар для forsaken66
 
Регистрация: 05.10.2009
Сообщений: 104
По умолчанию

Хм, если не трудно, в чем различия? И еще, а матрицы точно так же объявлять?

int *a;
int x,y;
......

a=new int[x,y];


Это правильно?
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.
forsaken66 вне форума Ответить с цитированием
Старый 06.10.2009, 13:18   #6
mYziK
Пользователь
 
Регистрация: 18.09.2009
Сообщений: 38
По умолчанию

Цитата:
Сообщение от forsaken66 Посмотреть сообщение
Хм, если не трудно, в чем различия? И еще, а матрицы точно так же объявлять?

int *a;
int x,y;
......

a=new int[x,y];


Это правильно?
Нет. Матрицы объявлять:
Код:
int **a; //Указатель на указатель =)
int x,y; //Размеры матрицы

a = new int*[x]; /*Выделили память под x-указателей, которые будут //указывать на строки*/

for(int i=0;i<x;++i)
  a[i] = new int[y]; /*Каждому указателю выделяем память под y-элементов типа int*/

//обращение:
for(int i=0;i<x;++i)
   for(int j=0;j<y;++j)
      a[i][j] = 0;      //Обращение к j-му элементу (столбцу) i-ой строки

//Освобождение памяти

for(int i=0;i<x;++i)
  delete [] a[i];
delete [] a;
mYziK вне форума Ответить с цитированием
Старый 06.10.2009, 13:23   #7
forsaken66
Куды бечь?
Форумчанин
 
Аватар для forsaken66
 
Регистрация: 05.10.2009
Сообщений: 104
Восклицание Ну вот, снова парюсь...

Не пойму как можно объявлять динамические матрицы. Пробую вот так:

Код:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
int x,y,i,j;
char *a;
main()
{
clrscr();
cout<<"Vvedite proizvolnoe 4islo polei"<<"\n\n";
   cin>>x>>y;
   a=new char[x][y];
   //-----------------vvod matricu--------------
   for (i=1;i<=x;i++)
   {
    for (j=1;j<=y;j++)
     {
      a[i][j]=getch();
      cout<<a[i][j];
     }
    cout<<"\n";
   }
return 0;
}
вот тут a=new char[x][y]; выдает ошибку что нет константы. Подскажите, как объявить динамическую матрицу? А то неохота новую тему делать, форум засорять.
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.

Последний раз редактировалось Sazary; 07.10.2009 в 00:12.
forsaken66 вне форума Ответить с цитированием
Старый 06.10.2009, 13:25   #8
forsaken66
Куды бечь?
Форумчанин
 
Аватар для forsaken66
 
Регистрация: 05.10.2009
Сообщений: 104
Хорошо

mYziK, ты адски быстр! пока я пост писал ты уже мне на мой вопрос ответил! Спасибо большое!!
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.
forsaken66 вне форума Ответить с цитированием
Старый 06.10.2009, 13:28   #9
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Думаю, можно сделать так:

char *a1 = new char[x*y];
char **a2 = a1
...
cout << a2[i][j];



P. S. Так не получается... но можно так:

char *a1 = new char[x*y];
...
cout << a2[i+j*y];

Так, кстати, быстрее.

Последний раз редактировалось ds.Dante; 06.10.2009 в 13:35.
ds.Dante вне форума Ответить с цитированием
Старый 06.10.2009, 13:41   #10
forsaken66
Куды бечь?
Форумчанин
 
Аватар для forsaken66
 
Регистрация: 05.10.2009
Сообщений: 104
Лампочка

Цитата:
Сообщение от ds.Dante Посмотреть сообщение
Думаю, можно сделать так:

char *a1 = new char[x*y];
char **a2 = a1
...
cout << a2[i][j];



P. S. Так не получается... но можно так:

char *a1 = new char[x*y];
...
cout << a2[i+j*y];

Так, кстати, быстрее.


.....если честно, то я не могу понять этот код. В объяснение Myzik'a въехал, а тут... нельзя ли объяснить?
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.
forsaken66 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12
Вопрос про массивы и модули ? juan666777 Общие вопросы Delphi 6 21.07.2009 22:43
Stringgrid, cells[m,n] и двумерные массивы.(#002) Очередной вопрос начинающего. Albert2008 Компоненты Delphi 4 28.07.2008 19:02
Вопрос массивы и циклы probmat Помощь студентам 7 16.03.2008 13:35