为什么这个打印内存地址而不是值
Why is this printing memory addresses instead of values
这是我的 driver
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]
分配了 space,但没有将其初始化为一个值。除了在 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}};
这是我的 driver
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]
分配了 space,但没有将其初始化为一个值。除了在 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}};