指向c中结构的范围?

taut 发布于 2019-03-09 c 最后更新 2019-03-09 14:33 2 浏览

#include<stdio.h>
#include<conio.h>
struct GNode{
    struct gnode* nextnode;
    struct gnode* arcptr;
    int Visited;
}
typedef struct GNode* Grnd;
struct ArcNode{
    struct arcnode* nextarc;
    struct acrnode* ndptr;
}
typedef struct ArcNode* Arc;
Grnd getGraphNode(){
    Grnd NewNode=(Grnd)malloc(sizeof(struct GNode));
NewNode->nextnode=NULL;
    NewNode->arcptr=NULL;
return NewNode;
}
Arc getArcNode(){
    Arc NewArc=(Arc)malloc(sizeof(struct ArcNode));
NewArc->nextarc=NULL;
    NewArc->ndptr=NULL;
return NewArc;
}
void join(Grnd *GNode1,Grnd *GNode2){
    Arc NewArc=getArcNode();
    NewArc->ndptr=(*GNode2);
NewArc->nextarc=(*GNode1)->arcptr;
    (*GNode1)->arcptr=NewArc;
}
Grnd addNode(Grnd *Graph){
    Grnd NewNode=getGraphNode();
if((*Graph)==NULL){
        (*Graph)=NewNode;  
        return NewNode;
    }
while((*Graph)->nextnode!=NULL)
        Graph=Graph->nextnode;
(*Graph)->nextnode=NewNode;
return NewNode;  
}
考虑到上面的C代码:我担心当我调用join函数来连接两个图节点时,它会真的加入它们吗?因为只要程序超出join的范围,NewArc就不存在。因此,当我在创建图表后尝试查找给定节点的所有相邻节点时,我能够吗?为什么?
已邀请:

mqui

赞同来自:

because as soon as the program goes out of the scope of join , NewArc doesn't exist.
那就对了!指针本身消失了,但它指向的内存仍在那里,为你分配。所以你可以继续通过其他指针继续引用它,直到你free为止。
(*GNode1)->arcptr=NewNode;
我认为你的意思是NewArc而不是NewNode