指针作为函数的参数

指针作为函数的参数

各位小伙伴学习了指针之后是不是跟我一样,一脸蒙逼这玩意在讲啥,我也是经过了很长时间的思考才勉强懂了指针的意思。
指针其实就是一种变量,只是它与普通变量不太一样,普通变量存放的是一个实实在在的值,而它存放的却是一个值的地址。
计算机要对数据进行处理是需要知道这个数据它在哪里的,也就是这个数据的地址。而我们平时写代码,例如:设置一个变量a=2,其实当我们写了这个a之后,计算机就申请了一个空间给a了,然后才可以给a赋值,也就是将这个值放在这个空间里。
而当我们写了一个指针之后,计算机也是会申请一个空间的,而这个空间它不是用来存放具体的数据的,而是这个数据的地址,通过这个地址我们就可以找到相应的数据了。
问题来了,你是不是这样很多此一举,将空间放值不就行了吗?为什么还要来放地址,然后再通过地址来找到对应的值。但是这样可以方便我们调用数据,特别是将指针作为函数参数的时候。下面我们就通过一个例子来感受一下吧。

#include<stdio.h>
void swap1(int x,int y),swap2(int *px,int *py),swap3(int *px,int *py);

int main()
{
	int a=1,b=2;
	int *pa=&a,*pb=&b;
	swap1(a,b);
	printf("经过变换之后:a=%d,b=%d\n",a,b);
	
	a=1;
	b=2;
	swap2(pa,pb);   
	printf("\n经过变换之后:a=%d,b=%d\n",a,b);
	
	a=1;
	b=2;
	swap3(pa,pb);
	printf("\n经过变换之后:a=%d,b=%d\n",a,b);
	
	return 0;
} 

void swap1(int x,int y)  //将普通的变量作为形参
{
	int t;
	t=x;
	x=y;
	y=t;
}

void swap2(int *px,int *py)   //将指针作为形参
{
	int t;
	t=*px;
	*px=*py;
	*py=t;
}

void swap3(int *px,int *py)   //将指针作为形参
{
	int *pt;
	pt=px;
	px=py;
	py=pt;
} 

运行结果如下:

经过变换之后:a=1,b=2

经过变换之后:a=2,b=1

经过变换之后:a=1,b=2

从结果中我们可以看出swap1()和swap3()并没有让a,b的值改变,而swap2()则可以。
swap1()采用的是将普通变量作为形参,当main函数运行到swap1函数时,计算机其实是再申请了x和y两块空间,而a和b的值分别赋值给x和y,而我们可以看出swap1中是对x和y中的值进行调换,所以a和b的值其实并没有被改变过,a和b在swap中的作用也只是对x和y赋值。
在这里插入图片描述
swap2中是将pa和pb中的值分别传给px和py,也就是分别将a和b的地址传给px和py,而因此px和py就分别指向了a和b,px与py众所周知分别表示a和b的值,所以swap2中实实在在对a和b进行了调换。
在这里插入图片描述
swap3也是指针作为形参为什么它就不能将a和b的值调换呢?我们可以看到它们调换的是指针px与py也就是调换了指针内部的地址,但是对应的地址里面的值还是没有调换啊,其实就是调换了px与py的指向而已,而地址里的东西还是没有变化(这里是不是贼烧脑,我当初看的时候就是绕晕在里面的)
在这里插入图片描述写的不好的请各位老铁多多指点呀,关于指针的我之后还会继续发,关注我就可以看到我下期内容啦!!

发布了5 篇原创文章 · 获赞 1 · 访问量 144

猜你喜欢

转载自blog.csdn.net/weixin_42371679/article/details/103966260