2012-02-07 55 views
2

我想得到一些帮助,以下问题。 我有一个结构节点,我想改变它的内部使用一些方法。 ,我想打印我的主要方法内更改的结构的内容。 我怎样才能让结构发生变化,并在我的主体中看到更改的值,而无需返回节点作为返回值。 我想它可能会解决与传递结构节点作为指针,然后编辑它。 这样做的正确方法是什么?更改C中的结构/变量内容

例如:

typedef struct Node{ 
    struct Node * right; 
    struct Node * left; 
    void * data; 
}Node; 

void insert(void * element, Node* root){ 
    if(root==NULL){ 
     root=(Node*)malloc(sizeof(Node)); 
     root->data=element; 
    } 
} 


int main(){ 
    Node a; 
    int b=8; 
    insert(&b,&a); 
    printf("%d",*(int*)a.data); 
    return 0; 
} 

的printf不打印8将打印1(我猜一些垃圾)

+0

如果这是作业,请标记为这样。是的,指针是这样的。 – Juan 2012-02-07 16:29:51

+0

这不是作业 – mary 2012-02-07 16:38:19

回答

3

这听起来像你正在尝试做以下

  • 创建一种方法中的结构体,例如主
  • 将其传递给第二种方法,例如
  • 有例如修改结构,并有导致主

可见如果是,则在C这样做的方法是通过将struct为指针example

struct Node { 
    int data; 
    struct Node* pNext; 
}; 

void example(struct Node* pNode) { 
    pNode->data = 42; 
    pNode->pNext = NULL; 
} 

int main() { 
    struct Node n; 
    example(&n); 
    printf("%d\n", n.data); 
} 

编辑

应对更新的问题。

要查看修改Node的结果,您必须通过Node*。因此,要查看Node*修改的结果,您需要通过Node**。从本质上讲,你需要传递比你想要改变/返回的值更多的间接水平。

void insert(void* element, Node** ppRoot){ 
    if (NULL == *ppRoot) { 
    Node* pTemp = malloc(sizeof(Node)); 
    pTemp->data = element; 
    *ppRoot = pTemp; 
    } 
} 
+0

我用一些代码更新了这个问题。 – mary 2012-02-07 16:33:01

+0

@mary更新了我的回答 – JaredPar 2012-02-07 16:36:18

+0

当我按照你说的那样正确地出来时,但是如果我想像我那样使用malloc分配内存。为什么它不工作呢? – mary 2012-02-07 16:37:37