在子函数中改变指针的值
2019-06-12 本文已影响0人
SnC_
先看一段代码
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;
}
为何在子函数中修改指针的指向不成功呢?
因为,指针作为形式参数传给子函数,传递的是指针本身的值。
子函数会在栈中新开辟空间来保存该值。修改该值,并不会影响主函数中的实参。
如何在子函数中修改指针的值?
- 使用指针的指针
若将指针a的指针作为子函数参数,则在子函数中是可以通过引用关系找到指针a的位置,并对其进行修改的。 - 子函数return局部变量
用return来传递函数中修改后的结果,是一种比较朴素的做法。