当前位置:网站首页>二级指针的简单理解

二级指针的简单理解

2022-08-10 19:43:00 小哇123

最近讨论到二级指针,又犯错了,记录一下,实际上指针变量和其他变量的维度是一样的,之所以出现了二级指针,是因为被取地址的变量刚好是一个指针变量。

#include <stdio.h>

int a = 3;
int b = 5;

/*
** change var that the pointer points to
*/
void fun(int* p)
{
	p = &b;
	
	return;
}

/*
** main function
*/
int main()
{
	int* q = &a;
	

	fun(q);
	
	printf("q points to %d\n", *q);
	
	
	return 0;
}

结果:q points to 3.

上面这段程序的本意是通过执行fun(int *)函数,改变main()函数中指针指向的变量,让q由指向全局变量a变为指向全局变量b,实际上就是改变指针变量q的值,但运行下来,q还是指向的a,并没有指向b。

当要改变一个非指针类型的变量的值时,有两种方法:(1)将函数返回值赋值给这个变量,通过值传递的方式改变;(2)将这个变量的地址传递出去,通过址传递的方式改变。

从方法(2)出发,现在有一个变量,想要改变这个变量的值,如果采用地址传递,需要取这个变量的地址作为函数参数:在这个例子中,想要改变指针变量q指向的变量,也就是想要改变指针变量q的值,那么采用地址传递的话,以此类推地,就需要取指针变量q的地址,也就是形成一个二级指针,所以,二级指针的概念就这么自然地产生了。

总结一下:

指针的作用是为了改变指针指向地址上的值,

二级指针是为了改变其指向的一级指针的值,也就是改变一级指针指向的变量。

实际上,二级指针是一个自然形成的概念,多用在想要更改一级指针指向的变量。

下面用代码演示一下(1)、(2)两种改变指针指向变量的方法:

(1)值传递:

#include <stdio.h>

/*
** change var that the pointer points to
*/

int a = 3;
int b = 5;

int* fun(int* p)
{
	p = &b;
	
	return p;
}

/*
** main function
*/
int main()
{
	int* q = &a;
	
	q = fun(q);
	 	
	printf("q points to %d\n", *q);//输出结果 5
	
	
	return 0;
}

(2)地址传递:

#include <stdio.h>

/*
** change var that the pointer points to
*/

int a = 3;
int b = 5;

void fun(int* p)
{
	*p = &b;   想要改变p指向的变量的值,p这里实际上是一个二级指针,目的是为了让p指向的变量
               的值变为b的地址(效果就是让其一级指针指向b变量),也就是*p(一级指针的值)
               也就是改变一级指针指向的变量,其实和对其他类型的指针变量
               通过指针来修改其指向变量的值没有什么区别
	
	return;
}

/*
** main function
*/
int main()
{
	int* q = &a;
	
	fun(&q);
	 	
	printf("q points to %d\n", *q);//输出结果 5
	
	
	return 0;
}

实际上,就是这样一件事情,*p = 5,这个操作就是为了改变指针变量p所指向的变量的值,只是如果p是一个二级指针的话,改变的是其一级指针指向的变量,分清楚,目的是改变变量的值,还是改变指向的变量。一级指针用于改变指向的变量的值,二级指针用于改变一级指针指向的变量(也是改变一级指针的值,刚好也是改变一级指针的指向的变量)。

原网站

版权声明
本文为[小哇123]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_39224221/article/details/126249456