c++ - 传递二维数组的问题
问题描述
我阅读了如何在函数中将二维数组作为参数传递并尝试实现它。我遇到了两个问题:
1)代码输出的第一行包含垃圾值。2) ((arr + i n) + j) 行实际上做了什么?我的意思是,为什么我们不能做类似( (arr + i) + j) 的事情来访问 arr[i][j] ?
我还尝试使用参数 int **arr 传递矩阵,然后尝试将值打印为 arr[i][j] 但没有输出。
这是我得到的输出:-
Enter number of nodes: 4
0167772161878012032-1
0000
0000
0000
这是我的代码:-
#include <iostream>
using namespace std;
void show(int* arr, int n)
{
int i, j;
for(i = 0; i < n; ++i)
{
for(j = 0; j < n; ++j)
{
cout << *((arr + i*n) + j);
}
cout << endl;
}
}
int main()
{
int n, i, j;
cout << "Enter number of nodes: ";
cin >> n;
int arr[n][n] = {{0}}; //Will initialize all elements in the matrix with 0.
show((int*)arr, n);
}
解决方案
这里最大的问题是您使用的是 C 而不是 C++。
为了避免人们喘不过气来并开始宗教或政治讨论,让我们把它归结为:
C++ 中不允许使用 VLA(可变长度数组)。
此外,您永远不应该对拥有的内存使用原始指针,也不要使用 pinter 算法。
然后是主题:
传递二维数组的问题
用于将数组传递给函数的语法是错误的。在 C++ 中,数组可以通过引用或指针传递。请参见:
void function1(int(&m)[3][4]) // For passing array by reference
{}
void function2(int(*m)[3][4]) // For passing array by pointer
{}
int main()
{
int matrix[3][4]; // Define 2 dimensional array
function1(matrix); // Call by reference
function2(&matrix); // Call via pointer
return 0;
}
当然,我们可以使用指针进行各种脏设计。即使接受指针也会衰减。但我们不应该这样做。
推荐阅读
- azure - 如何将 Jmeter 与 Databricks 火花集群连接起来
- android-studio - Gradle 同步失败:违反加载程序约束:解析字段“PATH_HASHING_STRATEGY”时
- apollo - 将 reac-apollo 依赖项更新到 apollo 3 时出现问题
- javascript - 我如何在集合中的文档中获取所有子集合
- windows - windows只能运行一个应用程序,没有最小化
- javascript - 按其数组值展平和排序嵌套的对象数组
- excel - 在excel中从文本转换为日期格式
- node.js - Heroku 环境变量对 React 应用程序不可见
- frontend - Haproxy 为来自绑定 IP 地址和端口的请求返回连接重置
- git - Visual Studio 2019 不会将添加的文件暂存到 Git 存储库