Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Феномен оператора [] в C++ Win32

548
11 апреля 2009 года
Maximillian_Cavalera
157 / / 16.08.2007
Всем привет!
Я написал следующую программу,
Код:
int _tmain(int argc, _TCHAR* argv[])
{
    int m = 3, n = 3;
    int* a = new int[m, n];
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            a[i, j] = rand();
            printf("%d\t", a[i, j]);
        }
        printf("\n");
    }
    /*
    Здесь напечатает, напр.
    1   2   3
    4   5   6
    7   8   9
    */

    printf("----------------------\n");
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("%d\t", a[i, j]);
        }
        printf("\n");
    }
    /*
    Здесь
    7   8   9
    7   8   9
    7   8   9
    */

    delete [] a;
    _getch();
    return 0;

Почему когда я печатаю массив во второй раз выводятся значения только нижней строки?
1.9K
11 апреля 2009 года
GreenRiver
451 / / 20.07.2008
Всё очень просто - в С++ нельзя создавать многомерные массивы таким образом. Только так:
Код:
int m = 3, n = 3;

    int **a = new int*[m];
    for (int i = 0; i < m; i++)
    {
        a = new int[n];
        for (int j = 0; j < n; j++)
        {
            a[j] = rand();
            printf("%d\t", a[j]);
        }
        printf("\n");
    }

    printf("----------------------\n");
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("%d\t", a[j]);
        }
        printf("\n");
    }

    for (int i = 0; i < m; i++)
    {
        delete[] a;
    }
    delete[] a;
3
11 апреля 2009 года
Green
4.8K / / 20.01.2000
Цитата: GreenRiver
Только так:


Ну не только так..
Можно и более приблеженное к реальному многомерному массиву, т.е. плоское расположение в памяти сообразить.
А можно и c помощью vector < vector <T> >.

А вот с названием темы автор ошибся, это феномен незнания языка программирования. :)

1.9K
12 апреля 2009 года
GreenRiver
451 / / 20.07.2008
Так и знал, что упомянут плоское расположение... :)
А в общем согласен с Green :)
350
19 апреля 2009 года
cheburator
589 / / 01.06.2006
[i, j] - паскальный стиль, на C++ перечисление через запятую означает оператор "," и в итоге у вас получится одно число:
[5,2] эквивалентно [2], например. (или точнее, [5,2] ~ [: : operator , (5, 2)] ~ [2])
Правильно писать [5][2]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог