Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> указатель на указатель, как правильно? 
V
    Опции темы
lv151
Дата 26.5.2009, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



int** m1 = (int **) new int[10][10]; 
как обращаться к отдельному элементу массива?
нормально ли вот так работать? smile

или лучше так:

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



PM MAIL   Вверх
andrew_121
Дата 26.5.2009, 22:18 (ссылка)   | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



lv151, А не лучше ли так:
Код

typedef std::vector<std::vector<int> > array2d;
...
array2d arr;
...
int x;
int y;
int val;
...
arr[x][y] = val;



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 26.5.2009, 22:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(lv151 @  26.5.2009,  22:07 Найти цитируемый пост)
int** m1 = (int **) new int[10][10]; 

так неверно.


Цитата(lv151 @  26.5.2009,  22:07 Найти цитируемый пост)

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

вот так

а причем тут вопрос
Цитата(lv151 @  26.5.2009,  22:07 Найти цитируемый пост)
как обращаться к отдельному элементу массива?


PM   Вверх
lv151
Дата 26.5.2009, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Цитата(azesmcar @  26.5.2009,  22:30 Найти цитируемый пост)
так неверно.

из учебника Т.А.Павловской


Цитата(azesmcar @  26.5.2009,  22:30 Найти цитируемый пост)
а причем тут вопросЦитата(lv151 @  26.5.2009,  22:07 )как обращаться к отдельному элементу массива?


как причём? smile как работать с этим безобразием smile


PM MAIL   Вверх
azesmcar
Дата 26.5.2009, 22:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(lv151 @  26.5.2009,  22:36 Найти цитируемый пост)
из учебника Т.А.Павловской


Код

#include <iostream>

void* operator new(size_t sz)
{
    std::cout << sz << std::endl;
    return 0;
}

int main()
{
    int** m1 = (int **) new int[10][10]; 
}


Цитата(lv151 @  26.5.2009,  22:36 Найти цитируемый пост)
как причём? smile как работать с этим безобразием smile

Код

int main()
{
    int** m = new int*[10]; 
    for (int i = 0; i < 10; ++i)
    {
        m[i] = new int[10];
    }
    for (int i = 0; i < 10; ++i)
    {
        for (int j = 0; j < 10; ++j)
        {
            m[i][j] = 1;
        }
    }
    for (int i = 0; i < 10; ++i)
    {
        delete [] m[i];
    }
    delete [] m;
}



Это сообщение отредактировал(а) azesmcar - 26.5.2009, 22:54
PM   Вверх
lv151
Дата 27.5.2009, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



int** m1 = (int **) new int[10][10]; - вот с этим smile
PM MAIL   Вверх
math64
Дата 27.5.2009, 11:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Цитата(lv151 @  27.5.2009,  10:52 Найти цитируемый пост)
int** m1 = (int **) new int[10][10]; - вот с этим 

А с этим работать нельзя - приведение неправильное.
PM   Вверх
azesmcar
Дата 27.5.2009, 11:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Standard)

When the allocated object is an array (that is, the direct-new-declarator syntax is used or the new-type-id or
type-id denotes an array type), the new-expression yields a pointer to the initial element (if any) of the
array. [Note: both new int and new int[10] have type int* and the type of new int[i][10] is
int (*)[10]. ]

5 Expressions 5.3.4 New

6 Every constant-expression in a direct-new-declarator shall be an integral constant expression (5.19) and

evaluate to a strictly positive value. The expression in a direct-new-declarator shall have integral or enumeration
type (3.9.1) with a non-negative value. [Example: if n is a variable of type int, then
new float[n][5] is well-formed (because n is the expression of a direct-new-declarator), but
new float[5][n] is ill-formed (because n is not a constant-expression). If n is negative, the effect of
new float[n][5] is undefined. ]


Цитата

int** m1 = (int **) new int[10][10]; - вот с этим smile

Код

#include <iostream>

int main()
{
    int** m = (int **) new int[10][10]();
    for (int i = 0; i < 100; ++i)
    {
        std::cout << ((int*)m)[i] << " ";
    }
}



Это сообщение отредактировал(а) azesmcar - 27.5.2009, 11:36
PM   Вверх
lv151
Дата 27.5.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Спасибо. 
Стандарт рулит smile
PM MAIL   Вверх
Dov
Дата 27.5.2009, 13:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(lv151 @  27.5.2009,  10:52 Найти цитируемый пост)
int** m1 = (int **) new int[10][10]; - вот с этим

Ты хочешь создать двумерный динамический массив? Тогда так:
Код
int main()
{
    int (*m)[10] = new int[10][10];

    for (int i = 0; i < 10; ++i)
        for (int j = 0; j < 10; ++j)
            m[i][j] = 1;

    delete [] m;
    return 0;
}


Добавлено через 2 минуты и 7 секунд
Первое измерение может быть задано переменной, второе должно быть константой..


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
lv151
Дата 27.5.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



нет, я хотел разобраться с указателями на указатели.
PM MAIL   Вверх
math64
Дата 27.5.2009, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Можно ещё так:
Код

int (*p)[10] = new int[10][10];
int** q = new int*[10];
for(int i=0;i<10;i++)
  q[i] = p[i];
for(int i=0;i<10;i++)
  for(int j=0;j<10;j++)
    q[i][j] = i*j;
delete[] q;
delete[] p;

PM   Вверх
lv151
Дата 12.6.2009, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



int** m = new int*[10]; - (*m) указывает на участок памяти из 10 указателей типа int?

*m--------------------(**m)указатель 1-------элементы массива
-----------------------указатель 2-------элементы массива
-----------------------указатель 3-------элементы массива
-----------------------указатель 10-------элементы массива

???

p.s. где можно почитать про извращения с синтаксисом объявления указателей?

Это сообщение отредактировал(а) lv151 - 12.6.2009, 22:17
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0852 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.