изменение структуры / содержимого переменной в C - PullRequest
2 голосов
/ 07 февраля 2012

Я бы хотел получить помощь по следующему вопросу.У меня есть структурный узел, и я хочу изменить его внутренности, используя какой-либо метод.и я хочу напечатать содержимое измененной структуры внутри моего основного метода.Как я могу изменить структуру и увидеть измененное значение в моем 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 Ответ

3 голосов
/ 07 февраля 2012

Звучит так, будто вы пытаетесь сделать следующее

  • Создать структуру одним методом, скажем 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;
  }
}
...