C++ 在c+中作为引用传递数组+;

C++ 在c+中作为引用传递数组+;,c++,arrays,C++,Arrays,我一直在尝试使用2D数组作为函数的引用。谢谢你的帮助 #include <iostream> using namespace std; void dfs(int *G[],int i,int *visited,int size) { visited[i]=1; int j; for(j=0;j<size;j++) { if(!visited[j]&& G[i][j] == 1) dfs(G,j,vi

我一直在尝试使用2D数组作为函数的引用。谢谢你的帮助

#include <iostream>
using namespace std;
void dfs(int *G[],int i,int *visited,int size) {
    visited[i]=1;
    int j;
    for(j=0;j<size;j++) {
        if(!visited[j]&& G[i][j] == 1)
            dfs(G,j,visited);
    }
}
#包括
使用名称空间std;
无效dfs(int*G[],int i,int*visted,int size){
访问量[i]=1;
int j;

对于(j=0;j而言,问题在于
dfs
函数的签名中

void dfs(int *G[],int i,int *visited)
它使用指向
int
的指针。但是,您正在向它传递一个数组

dfs(Array_From_file, 0, visited);
其中,
Array\u From\u file
声明为

int Array_From_file[ROWS][COLUMNS];
无法进行此类转换。快速修复:将函数的签名更改为:

void dfs(int G[][COLUMNS],int i,int *visited)
最好使用通过引用传递的
std::vector
。以下是一个示例:

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int const COLUMNS = 100;
int const ROWS = 100 ;
typedef std::vector<std::vector<int>> int_mat;

void dfs(const int_mat& G, int i, vector<int>& visited) {
    int size = ROWS * COLUMNS ;
    visited[i] = 1;
    for (int j = 0; j < size; j++) {
        if (!visited[j] && G[i][j] == 1)
            dfs(G, j, visited);
    }
}
#包括
#包括
#包括
使用名称空间std;
int const COLUMNS=100;
int const ROWS=100;
typedef std::向量int_mat;
无效dfs(常数内部矩阵和G、内部i、向量和访问){
int size=行*列;
访问量[i]=1;
对于(int j=0;j
我相信您(经过大量编辑)的解决方案是:

int one_to_two(int* a, int x, int y)
{
    return a[x*ROWS+y];
}
void dfs(int** G,int i,int *visited) {
    int size = ROWS * COLUMNS ;
    visited[i]=1;
    int j;
    for(j=0;j<size;j++) {
        if(!visited[j]&& one_to_two(G,i,j) == 1)
            dfs(G,j,visited);
    }
}
int-one-to-two(int*a,int-x,int-y)
{
返回一个[x*行+y];
}
无效dfs(整数**G、整数i、整数*已访问){
int size=行*列;
访问量[i]=1;
int j;

对于(j=0;jso i应更改无效PDF(int G[]],int i,int*visitded),您应将签名更改为
void(int G[][列],int,int*)
(您必须指定第二个维度),或使用文件
中的
int**Array\u。因此,我应该将int size变量放入函数中,并使用const max放入一个嵌套for循环right@mello,是的,像在任何二维数组上一样循环,使用嵌套循环。@mello查看更新的编辑以修改代码,使其使用
std::vector
@mello我认为其中一个正好解决了您的问题。两者都解决了,您出现问题的原因是静态/动态数组不匹配,此问题已在两个链接的答案中得到了回答。这将
G
声明为引用数组,这是一个错误(在编译时捕获)刚刚发生了…程序崩溃了..你有任何主题吗?请更改它。我认为引用会起作用,但它不会。双指针应该能起作用。@JonathanBedard它仍然不起作用,
int G[]
int**G
相同,问题是你要向它传递一个数组。只有当你传递一个双指针,或者将签名改为
int G[][列]
好的,所以我之前说的一切都是乱七八糟的。发布一个肯定会编译的数组,尽管有点麻烦。