关于函数体内指针指向问题
今天在做一道题的时候,发现了一个问题,那就是函数的执行会不会改变指针指向的问题。
下面来诠释此问题。
首先,我们用一段代码创建了一个具有10个节点的链表(不算头结点):
struct test {
int data;
test* next = NULL;
};
test* createList()
{
test* list = new test;
test* ret = list;
for (int i = 0; i < 10; i++)
{
test* newNode = new test;
newNode->data = i;
list->next = newNode;
list = list->next;
}
return ret;
}
我们有一个测试函数来改变指针:
void changePoint(test* list)
{
list = list->next;
}
int main()
{
test* testlist = createList();
changePoint(testlist);
}
下面开始调试,将断点设置在函数changePoint中,得到如下结果:

(语句执行前的list)

(语句执行后的list)
可见在函数体内部,指针是被改变了的。
但在函数执行完毕后,指针又变成了原来未被改变的:

这可能是因为为传入的指针生成了一个临时变量,函数只是对临时变量在进行操作。
如果想要同时更改函数体内和函数体外的指针的值,可以使用指针的引用.
void changePoint(test* &list)
{
list = list->next;
}
可以发现,指针被顺利改写。



浙公网安备 33010602011771号