Сканирование значений в матрицу без использования языка [ ] C

У меня проблема. Меня попросили написать программу, которая транспонирует матрицу без использования []... например, я знаю, что если бы это был одномерный массив, я мог бы сказать, что массив[3] такой же, как *(массив+3 )... но как мне это сделать с матрицей?

вот мой код для сканирования:

void scan_matrix(matrix mat1,int number_of_rows, int number_of_columns)
{
    int row_index,column_index;
    for(row_index=0;row_index<number_of_rows;row_index++)
    {
        printf("Enter the values of row %d\n",row_index);
        for(column_index=0;column_index<number_of_columns;column_index++)
            scanf("%d",WHAT GOES HERE?????);
    }
}

person Oria Gruber    schedule 16.03.2013    source источник
comment
Это зависит от того, что такое matrix...   -  person Oliver Charlesworth    schedule 16.03.2013
comment
двумерный массив. со строками и столбцами. Я новичок в этом, извините, если вопрос был неясен.   -  person Oria Gruber    schedule 16.03.2013
comment
@OriaGruber, если вы не хотите использовать [] , вы должны использовать * арифметику   -  person Barath Ravikumar    schedule 16.03.2013


Ответы (2)


Если mat1 является простым указателем, то это должно выполнить эту работу за вас:

for(row_index=0;row_index<number_of_rows;row_index++)
    {
        printf("Enter the values of row %d\n",row_index);
        for(column_index=0;column_index<number_of_columns;column_index++)
            scanf("%d", (mat1 + row_index*number_of_columns + column_index));
    }

Программа использует тот факт, что матрицы (двумерные массивы) фактически хранятся в памяти как одномерные массивы.

Возьмем двумерную матрицу:

1 2 3
4 5 6

Это сохраняется в памяти как:

1 2 3 4 5 6

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

Pos = Row*Num_Of_Col + Col
person asheeshr    schedule 16.03.2013

если мат представляет собой двумерный массив целых чисел, например: мат[3][3]

тогда код сканирования будет: scanf("%d",(*(mat+row_index)+column_index));

a[3] : *(a+3)
a[3][3] : (*(a+3)+3)
person VishalDevgire    schedule 16.03.2013