为什么这是打印内存地址而不是值
Why is this printing memory addresses instead of values
这是我的驱动程序
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}};
相关文章:
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- CUDA:统一内存和指针地址的更改
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 使用内存地址访问结构的属性值
- 如何读取特定地址的进程内存?
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- 如果 const 不分配内存,为什么我可以获取 const 的地址?
- 将布局映射到内存地址
- 为什么同一个变量的内存地址不同?
- LLVM 传递以在特定地址分配内存
- 无法将内存地址转换为值
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 给定特定内存地址的数组的动态内存分配
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 获取 R 数据帧的内存地址
- 如何配置bazel以运行地址/内存清理器?
- 存储 std::list 元素的地址;内存
- 确定库的地址内存