Почему эта память печатает адреса вместо значений - PullRequest
0 голосов
/ 30 октября 2019

Вот мой драйвер

int square[2][2] = {
    {1,2},
    {3,4}
};

matrixMulti(square, 2);

Вот моя функция

void matrixMulti(const int a[][2], const int rows) {

    int b[2][2];

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            for (int k = 0; k < 2; k++) {
                b[i][j] += a[i][k] * a[k][j];
            }
        }
    }

    cout << "new matrix " << endl;
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            cout << b[i][j] << " ";
        }
        cout << endl;
    }
}

Вывод:

new matrix
-858993453 -858993450
-858993445 -858993438

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

Ответы [ 2 ]

4 голосов
/ 30 октября 2019

Вы писали:

int b[2][2];

, а затем

b[i][j] += ...

Где вы инициализировали b?

int b[2][2] = {};

или

int b[2][2] = {0,0};

Должен делать работу.

2 голосов
/ 30 октября 2019

Выводятся значения мусора, а не адрес массива. Вот почему. В этом фрагменте кода

void matrixMulti(const int a[][2], const int rows) {

    int b[2][2];

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            for (int k = 0; k < 2; k++) {
                b[i][j] += a[i][k] * a[k][j];
            }
        }
    }

Вы выделили пространство для int b[2][2], но не инициализировали его значением. Это было бы хорошо, кроме как в теле цикла for. b[i][j] += a[i][k] * a[k][j]; <=> b[i][j] = b[i][j] + a[i][k] * a[k][j]; вы ссылаетесь на значение b[i][j] до его инициализации. Другими словами, вы говорите, что b[i][j] равно b[i][j] + a[i][k] * a[k][j], но вы не можете сделать это, так как значение b[i][j] неизвестно.

Решением этого является инициализация int b[2][2] = {{0,0},{0,0}};

...