Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用数组作为全局变量与局部变量_C_Data Structures - Fatal编程技术网

C 使用数组作为全局变量与局部变量

C 使用数组作为全局变量与局部变量,c,data-structures,C,Data Structures,我一直在研究图形中的DFS算法,但一直在使用局部变量。 我有这样一个代码: #define MAX_VERTICES 50 typedef struck GraphType { int n; // number of nodes int adj_mat[MAX_VERTICES][MAX_VERTICES]; } GraphType; int visited[MAX_VERTICES]; void insert_vertex(GraphType* g, int v) {

我一直在研究图形中的DFS算法,但一直在使用局部变量。 我有这样一个代码:

#define MAX_VERTICES 50

typedef struck GraphType {
    int n; // number of nodes
    int adj_mat[MAX_VERTICES][MAX_VERTICES];
} GraphType;

int visited[MAX_VERTICES];

void insert_vertex(GraphType* g, int v) {
    if (((g->n) + 1) > MAX_VERTICES) {
        fprintf(stderr, "Graph: size of vertices ERROR");
        return;
    }
    g->n++;
}

void insert_edge(GraphType* g, int start, int end) {
    if (start >= g->n || end >= g->n) {
        fprintf(stderr, "Graph: number of vertices ERROR");
        return;
    }
    g->adj_mat[start][end] = 1;
    g->adj_mat[end][start] = 1;
}
void dfs_mat(GraphType* g, int v) {
    int w;
    visited[v] = TRUE;
    printf("vertex %d -> ", v);
    for (w = 0; w < g->n; w++) {
        if (g->adj_mat[v][w] && !visited[w])
            dfs_mat(g, w);
}

int main(void) {
    GraphType *g;
    g = (GraphType*)malloc(sizeof(GraphType));
    for (int i = 0; i < 4; i++)
        insert_vertex(g, i);
    insert_edge(g, 0, 1);
    insert_edge(g, 0, 2);
    insert_edge(g, 0, 3);
    insert_edge(g, 1, 2);
    
    dfs_mat(g, 0);
    free(g);
    return 0;
}
#定义最大顶点50
打字打字{
int n;//节点数
int adj_mat[最大顶点][最大顶点];
}图形类型;
int访问[MAX_顶点];
无效插入顶点(图形类型*g,int v){
如果((g->n)+1)>最大顶点数){
fprintf(stderr,“图形:顶点大小错误”);
返回;
}
g->n++;
}
无效插入_边(图形类型*g,整数开始,整数结束){
如果(开始>=g->n |结束>=g->n){
fprintf(stderr,“图形:顶点数错误”);
返回;
}
g->adj_mat[开始][结束]=1;
g->adj_mat[end][start]=1;
}
无效dfs_mat(图形类型*g,整数v){
int w;
访问[v]=正确;
printf(“顶点%d->”,v);
对于(w=0;wn;w++){
如果(g->adj_mat[v][w]&&&!已访问[w])
dfs_mat(g,w);
}
内部主(空){
图形类型*g;
g=(GraphType*)malloc(sizeof(GraphType));
对于(int i=0;i<4;i++)
插入_顶点(g,i);
插入_边(g,0,1);
插入_边(g,0,2);
插入_边(g,0,3);
插入_边(g,1,2);
dfs_-mat(g,0);
免费(g);
返回0;
}

我想做的是将访问的[MAX_顶点]数组变成一个局部变量(这样我就可以将它作为参数提供给其他函数)。如何将其添加到主函数中并从全局使用中删除?也许可以使用指针?

您只需在主函数中声明数组,并将其作为int*类型的参数传递给您需要的每个函数

void dfs_mat(GraphType* g, int *visited, int v) {
    int w;
    visited[v] = TRUE;
    printf("vertex %d -> ", v);
    for (w = 0; w < g->n; w++) {
        if (g->adj_mat[v][w] && !visited[w])
            dfs_mat(g, w);
}
void dfs\u mat(图形类型*g,int*v){
int w;
访问[v]=正确;
printf(“顶点%d->”,v);
对于(w=0;wn;w++){
如果(g->adj_mat[v][w]&&&!已访问[w])
dfs_mat(g,w);
}

只需将其传递给函数,不需要将其设置为本地。只需传递地址(即C编译器解析为地址的名称)@PaulOgilvie,虽然这在技术上是正确的,但作为本地或全局数组传递它在功能上还是有很大不同的。如果数组作为本地参数传递,那么它的长度也应该这样传递。另外,如何保证
w
不超过数组的大小?那么,如何避免缓冲区溢出也是一个问题她的问题将在以后的代码中重新讨论。将数组的长度作为参数传递是一个选项。这个问题是一般性的,所以我提供了一个简单的示例。