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;
Феномен оператора [] в C++ Win32
Я написал следующую программу,
Код:
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;
{
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;
Почему когда я печатаю массив во второй раз выводятся значения только нижней строки?
Всё очень просто - в С++ нельзя создавать многомерные массивы таким образом. Только так:
Цитата: GreenRiver
Только так:
Ну не только так..
Можно и более приблеженное к реальному многомерному массиву, т.е. плоское расположение в памяти сообразить.
А можно и c помощью vector < vector <T> >.
А вот с названием темы автор ошибся, это феномен незнания языка программирования. :)
А в общем согласен с Green :)
[5,2] эквивалентно [2], например. (или точнее, [5,2] ~ [: : operator , (5, 2)] ~ [2])
Правильно писать [5][2]