关于函数体内指针指向问题

  今天在做一道题的时候,发现了一个问题,那就是函数的执行会不会改变指针指向的问题。

  下面来诠释此问题。

  

  首先,我们用一段代码创建了一个具有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;
}

  可以发现,指针被顺利改写。

 

 

 

 

 

 

posted @ 2022-02-16 15:30  帝皇の惊  阅读(81)  评论(0)    收藏  举报