为什么这是打印内存地址而不是值

Why is this printing memory addresses instead of values

本文关键字:地址 内存 打印 为什么      更新时间:2023-10-16

这是我的驱动程序

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

我很困惑为什么它打印内存地址而不是存储在其中的值,以及如何让它打印值而不是内存地址。

您写道:

int b[2][2];

然后

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

你在哪里初始化b?

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

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

应该做这份工作。

打印的是垃圾值,而不是数组的地址。原因如下。在这个代码片段
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}};