Указывая на матрицу - PullRequest
       3

Указывая на матрицу

0 голосов
/ 26 октября 2011

Я хотел объявить указатель, который будет указывать на матрицу и получить значение обратно из матрицы:

float *p;
float ar[3][3];

[..]//give values to ar[][]

p = ar;

//Keep on printing values in the 3 X 3 matrix
for (int i = 0; i < 10; i++)
{
p = p + i;
cout << *p << ", ";
}

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Я подозреваю, что вы после:

p = &ar[0][0];

, который также может быть написан:

p = ar[0];

хотя ваш цикл for должен использовать p = p + 1; вместо p = p + i;.


Вы также можете использовать указатель на массив, если вы хотите, чтобы ваш цикл имел доступ к элементам матрицы по строке и столбцу:

float (*p)[3];

p = ar;

for (int i = 0; i < 3; i++)
    for (j = 0; j < 3; j++)
    {
        cout << p[i][j] << ", ";
    }
0 голосов
/ 26 октября 2011

EDIT2 : я идиот, у меня случайно было float **matrix вместо float (*matrix)[3]. Кафе всегда получал правильный ответ.

Это то, что вы хотите?

#include <stdio.h>
#include <stdlib.h>

void print_matrix(float (*matrix)[3], size_t rows, size_t cols)
{
   int i, j;
   for (i = 0; i < rows; i++)
      for (j = 0; j < cols; j++)
         printf("%f ", matrix[i][j]);
}

int main(void)
{
   float ar[][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
   print_matrix(ar, 3, 3);

   return EXIT_SUCCESS;
}

РЕДАКТИРОВАТЬ: Вы также можете иметь:

float *row1, *row2, *row3;
row1 = ar[0];
row2 = ar[1];
row3 = ar[2];
...
float row1_total = row1[0] + row1[1] + row2[2];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...