LINUX.ORG.RU

массивы и указатели С++


0

0

Всем привет. Подскажите плиз. Как с помощью указателя пройтись по двухмерному массиву и выдать значения елементов.
есть массив
int array[MAX][MAX]={
{3,2,1},
{3,4,5},
{9,6,7}
};

затем пробуем так:

int *ps_array;
ps_array=&array;

не выходит :(
ошибка "second.cpp:13: cannot convert `int (*)[3][3]' to `int *' in assignment"

Заранее благодарен за ответ.

Ответ на: комментарий от ElectroNik

Тогда рассказывай. Я вот например в Си чайник полный, может узнаю чего нового. Не век же на фортране писать.

WerNA ★★★★★
()
Ответ на: комментарий от phrm

очевидно:

ps_array= (int*)array

потому что
int array[MAX][MAX]
тоже самое, что и
int array[MAX*MAX]

Марк

++
на счет фортрана, товаришч не прав ..
даже физики, которые на нем пишут
медленно, но "вымирают" ..

carrot
()
Ответ на: комментарий от carrot

почему тогда если объявлять как int** ps_array, то эффект тотже, те фсе работает.

anonymous
()
Ответ на: комментарий от WerNA

Нужно явно указать указателю на первый елемент массива.

int *ps_array = &array[0][0];

for (int i=0; i<MAX*MAX; i++)
cout<<*ps_array++<<' ';

ElectroNik ★★
() автор топика
Ответ на: комментарий от ElectroNik

спасибо, добавил в свою копилку знаний - понадобится если сподоблюсь свои километры кода в Си перегнать.

WerNA ★★★★★
()
Ответ на: комментарий от WerNA

ну так array и будет указателем на первый элемент массива

anonymous
()

for(int i = 0;i < MAX;i++)
{
  for(int j = 0;j < MAX;j++)
    printf("%3d ", a[i][j]);

  printf("\n");
}

CKulT
()

А вообще, ИМХО, лучше обходиться без многомерных массивов вообще (конечно,
если речь идет о числах, а не о строках). Не надо множить типы без
надобности. Указатель на double, и хватит. К примеру, обнулить двумерный
массив размеров MxN, это

double array[M*N];

for (i = 0; i < M; i++)
    for (j = 0; j < N; j++) {
        array[i*N + j] = 0;
        //...
    }

Это неплохая практика, об этом у Страуструпа тоже есть, кстати, в "Численных
методах". Так сделано в GNU Scientific Library, реализовано в языке R.
И потом, такой вариант гораздо совместимее с Фортраном (это моя собственная
мысль, возможно ламерская, если кто поправит, буду благодарен) :)

murla
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.