二级指针的作用 -- 将变量从函数中带出

发布时间:2023年12月24日

使用一级指针不能将变量带出

void test(int *p)
{
   static int nub = 10; /*使用static是保证函数结束, 变量依然存在, 不然即使将它带出来, 函数结束时这片内存已经被释放了就没有意义了*/
   p = &nub;
}

int main(void)
{
  int *p = NULL;

  test(p);

  printf("%d",*p);

  return 0;
}

?

如上图所示:? 调用函数之后,虽然在test函数内进行了一系列的转换,可是main函数中的p中存放的还是0地址,所以使用一级指针无法将变量从函数中带出?

原因:? ??

其实很简单, 我们进行值传递的时候,传进去的值在函数内部进行怎样的改变都不会影响外面的值,值传递就是将变量中存储的东西传递给形参。?

我们使用地址传递,可以实现函数内部发生改变,外面的值也发生改变,我们传进去的是指针指向变量的地址,通过*对此地址进行操作,操作的是同一片内存,所以自然会影响到外面的值。

而我们传入的一级指针,只是传的是nub的地址,而不是指针变量p自己的地址,所以函数内部的指针变量存储的地址怎么变都不会影响外面的值,所以无法将带出变量。

使用二级指针将值带出

#include <iostream>
#include <Windows.h>

void test(int** p2)
{
	static int nub = 10;  /*使用static是保证函数结束, 变量依然存在, 不然即使将它带出来, 函数结束时这片内存已经被释放了就没有意义了*/
	*p2 = &nub;
}

int main(void)
{
	int* p = NULL;

	test(&p);

	system("pause");

	return;
}

?

?

?如上图所示, 在test函数执行了相关语句之后main函数中的指针p已经指向了nub,就可以对nub进行访问,实现了将变量带出。(其实,原理和值传递与地址传递那块是一样的,就是多了一层)。

文章来源:https://blog.csdn.net/weixin_68026222/article/details/135176637
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。