LINUX.ORG.RU

Многомерные массивы


0

0

Мне нужно изменить массив int i[3][6]; в отдельной функцие, т.е. я должен передать указатель на этот массив в нее (функцию). Но как это все организвать? Как написать указатель? ни int *i[][] ни **i ни *i[] - ничего не получается. О что писать в заглавие ф-ции: void f(int *i[][]) не прокатывает. Помогите пожалуста кто может

anonymous

На массив указатели не нужны.

Selecter ★★★★
()

C не имеет массивов!!! существует цепочка значений в памяти. переменная "массива" - указатель на первый элемент

Pi ★★★★★
()

Лови пример:

#include <stdio.h>

void print_mass( int *ic )
{
int i;

for( i = 0; i<100; i++ )
printf( "%d", ic[i] );
}

int main( int argc, char **argv )
{
int i, j;
int mas[10][10];

for( i = 0; i<10; i++ ) {
for( j = 0; j<10; j++ )
mas[i][j] = i+j ;
}

print_mass( &mas[0][0] );

return 0;
}
-- ВСТАВКА --

tetSU
()

> что писать в заглавие ф-ции: void f(int *i[][]) не прокатывает.

void f( int i[][6] );

если 6 меняется то нужно явно вычислять индекс типа x+y*6.

dilmah ★★★★★
()

Вообще, в таких случаях я бы не советовал связываться с многомерными
массивами. Когда действительно нужен массив массивов - то да, а тут можно
(и желательно) обойтись одномерными массивами. То есть примерно следующим:

#include <stdio.h>

double x[8];

double get_element(double *array, int j, int i, int nx)
{
    return array[j*nx + i];
}
void   set_element(double *array, int j, int i, int nx, double value)
{
    array[j*nx + i] = value;
}

int main()
{
    int nx = 4, ny = 2;
    int i, j;

    for (j = 0; j < ny; j++)
        for (i = 0; i < nx; i++)
            set_element(x, j, i, nx, j*nx + i + 1);

    for (j = 0; j < ny; j++) {
        for (i = 0; i < nx; i++)
            printf("  %g", get_element(x, j, i, nx));
        printf("\n");
    }

    return 0;
}

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

> Когда действительно нужен массив массивов

Правильнее сказать "массив указателей на массивы".

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