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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2010, 23:02   #1
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию Динамический массив

Из-за чего я могу создать 2-мерный массив в этих 3-ёх строках кода?
Из-за чего я могу вложенный массив сделать выделив для него пямять, то есть вот это:

Цитата:
int **m = new int *[10];
for(i = 0; i < 10; i++)
m[i] = new int [10];

Из-за того, что создан не простой массив чисел, а из-за того что создан массив указателей?


Код:
// таблица Пифагора
#include <stdio.h>
#include <conio.h>

int main() {
   int i, j;

   int **m = new int *[10];

   for(i = 0; i < 10; i++)
      m[i] = new int [10];
// 2. инициализация
   for(i = 0; i < 10; i++)
      for(j = 0; j < 10; j++)
         m[i][j] = (i + 1)*(j + 1);
// 3. вывод
   for(i = 0; i < 10; i++) {
      for(j = 0; j < 10; j++)

         printf("%2d ", m[i][j]);
      printf("\n");
   }

   for(i = 0; i < 10; i++)
     delete [] m[i];
   delete [] m;

   getch();
   return 0;
}

2) Динамический объект на с++ создаётся так?
Код:
#include <iostream>
#include <conio.h>
using namespace std;

class Box{
	double width;
	double height;
	double depth;
};

int main()
{
    setlocale(0, "");
	Box *d=0;
	d = new Box;
      int s = d->depth=7.6;
      cout<<s;
	delete d;

   
	  getch();
  }

Последний раз редактировалось Golovastik; 26.05.2010 в 23:33.
Golovastik вне форума Ответить с цитированием
Старый 27.05.2010, 00:10   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

У тебя есть массив указателей на указатель, т.е массив указателей на одномерный массив, т.е массив одномерных массивов у тебя.
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 27.05.2010, 00:34   #3
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

1)Это понятно. Вопрос такой.
Из-за чего я могу создать внутренний массив, то есть вот это:
Код:
for(i = 0; i < 10; i++)
m[i] = new int [10];
2)Из-за чего я могу писать так:
Код:
m[i]
Из-за того, что создан не простой массив чисел, а из-за того что создан массив указателей?
Из-за того что каждый элемент массива - это указатель, именно поэтому я имею права, создать вложенный массив, посредством обращения по индексу массива? То есть например так m[5]=36;

Последний раз редактировалось Golovastik; 27.05.2010 в 00:37.
Golovastik вне форума Ответить с цитированием
Старый 27.05.2010, 00:46   #4
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

щито ? читайте про арифметику указателей
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 27.05.2010, 00:49   #5
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Так я читал про них и спрашиваю, ответьте пожалуйста.
Golovastik вне форума Ответить с цитированием
Старый 27.05.2010, 00:50   #6
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Golovastik ну если тебе будет удобно писать вместо m[i] так *(m+1) никто не возражает .
profi вне форума Ответить с цитированием
Старый 27.05.2010, 00:55   #7
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Из-за чего я могу писать так *(m+1) или так m[i]?
Golovastik вне форума Ответить с цитированием
Старый 27.05.2010, 00:56   #8
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Golovastik это одно и тоже. Короче иди все таки читай книжку.
profi вне форума Ответить с цитированием
Старый 27.05.2010, 01:00   #9
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

*(m+1) Понятно что это как и это m[i] является указателем на первый элемент массива, вопрос в том, почему я могу обратится к элементам массива m из-за чего?
Golovastik вне форума Ответить с цитированием
Старый 27.05.2010, 01:10   #10
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Это описано в стандарте С++ Вот примерно поэтому.
T array[N] == T * const array = new T[N];
тобишь, если грубо, то массив( array ) является просто константным указателем на некую область памяти.
Обращение по индексу, эквивалентно :
array[ i ] == *( array + i );
И оно же равно( если не ошибаюсь ) :
*( static_cast< void* >( array ) + sizeof( T ) * i );
*( (void*)array + sizeof( T ) * i );
Вывод : те же яйца, только сбоку
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux

Последний раз редактировалось ozo; 27.05.2010 в 01:17.
ozo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический массив Porsche Общие вопросы C/C++ 5 26.05.2010 08:04
Динамический массив! Mikhail91 Общие вопросы C/C++ 9 14.02.2010 14:45
Динамический массив Zhanna5006 Помощь студентам 7 10.01.2010 14:09
Динамический массив. Mickle Помощь студентам 9 21.06.2007 20:31
Динамический массив Mickle Общие вопросы Delphi 8 19.06.2007 06:45