在C中更改结构/变量内容

时间:2012-02-07 16:27:27

标签: c malloc parameter-passing

我想从以下问题中获得一些帮助。 我有一个结构节点,我想用一些方法改变它的内部。 我想在main方法中打印已更改结构的内容。 如何更改结构并在主体中查看更改的值,而不将节点作为返回值返回。 我想这可能是通过将struct Node作为指针传递然后编辑它来解决的。 这样做的正确方法是什么?

例如:

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(我猜一些垃圾)

1 个答案:

答案 0 :(得分:3)

听起来您正在尝试执行以下操作

  • 在一个方法中创建一个结构,比如main
  • 将其传递给第二种方法,例如
  • 让示例修改结构并在main
  • 中显示结果

如果是这样,那么在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;
  }
}