我想从以下问题中获得一些帮助。 我有一个结构节点,我想用一些方法改变它的内部。 我想在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(我猜一些垃圾)
答案 0 :(得分: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;
}
}