结构体指针在函数中的应用
结构体指针在函数中的应用
- 问题的提出:在做二叉树题目的时候,在传递结构体指针的时候,发现当我以这样的形式传入的时候,指针是没有发生任何改变的:
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
class soultion{
TreeNode* node = new TreeNode(0);
private:
void fun1(TreeNode* res) {
res = node;
}
public:
void fun2(TreeNode* root) {
TreeNode* res = nullptr;
traversal(res);
/*函数过后,res指针并没有发生改变*/
}
};
当时的想法是,我传入的是指针,为什么没有任何反应?
查阅资料之后发现,其实形参的传入,在函数中是一份拷贝,无论我们怎么改变,改变的是这个拷贝的指针。并不是传入的指针:
那我们一定需要传入这个指针,然后把改变传回来呢?
那只有传递指针的地址,然后在函数内,改变该地址的指针的值就可以实现功能。
class soultion{
TreeNode* node = new TreeNode(0);
private:
void fun1(TreeNode** res) {
*res = node;
}
public:
void fun2(TreeNode* root) {
TreeNode* res = nullptr;
traversal(&res);//传入地址
/*函数过后,res指针发生改变*/
}
};
参考:脱掉三千烦恼丝