在子函数中改变指针的值

先看一段代码

typedef struct LinkNode{
    int data;
    struct LinkNode *next;
}Node;

void test(Node* a){
    Node *b = (Node*)malloc(sizeof(Node));
    b->data = 2;
    a = b;
}

int main(){
    Node *a = (Node*)malloc(sizeof(Node));
    a->data = 1;
    test(a);
    printf("%d",a->data); // Output : 1
    return 0;
}

为何在子函数中修改指针的指向不成功呢?

因为,指针作为形式参数传给子函数,传递的是指针本身的值。
子函数会在栈中新开辟空间来保存该值。修改该值,并不会影响主函数中的实参。

如何在子函数中修改指针的值?
  1. 使用指针的指针
    若将指针a的指针作为子函数参数,则在子函数中是可以通过引用关系找到指针a的位置,并对其进行修改的。
  2. 子函数return局部变量
    用return来传递函数中修改后的结果,是一种比较朴素的做法。

你可能感兴趣的:(在子函数中改变指针的值)