有趣的指针(一)

        考虑这样一个问题,如果要交换两个变量的值,怎么样定义函数,首先我们得有一个中间变量temp,然后通过三次赋值(见代码)可以完成这个函数。那么问题来了,调用函数中的值可以因为被调函数而改变吗?答案是否定的。请看如下代码:

<span style="font-size:18px;">void exchange(int x,int y);//函数申明
void main()
{
	int s=6;
	int t=7;
	printf("调用之前s和t的值:%d %d\n",s,t);//调用之前s和t的值
	exchange(s,t);
	printf("调用之后s和t的值:%d %d\n",s,t);//调用之后s和t的值
}
void exchange(int x,int y)
{
	int temp;
	temp=x;
	x=y;
	y=temp;//交换x和y的值
}</span>
      先来分析上面的代码,exchange()的功能是交换两个数的值,然后在调用函数中使用该函数就可以交换两个数的值了,但事实并非如此,因为是s和t是main函数私有的,而x和y是属于exchange()的变量,他们相互独立的,因此交换x和y的值无法改变s和t的值。那如何来完成交换呢,指针就可以完成这个交换值的过程,代码如下:

<span style="font-size:18px;">void exchange(int x,int y);//函数申明
void main()
{
	int s=6;
	int t=7;
	printf("调用之前s和t的值:%d %d\n",s,t);//调用之前s和t的值
	exchange(&s,&t);
	printf("调用之后s和t的值:%d %d\n",s,t);//调用之后s和t的值
}
void exchange(int *x,int *y)
{
	int temp;
	temp=*x;
	*x=*y;
	*y=temp;//交换x和y的值
}</span>
       在这段代码中,在调用函数使用了地址运算符&,&s和&t分别代表s和t这两个变量的地址,也就是exchange()在被调用的时候传了地址而不是变量本身,这样变量s和t就可以访问到exchange()这个函数了。在被调用函数中做的三次赋值运算指的是指针变量的赋值运算 ,*x指向了s,x就是&s(绑定),也就是说*x就代表指向s这个变量地址中的值。再说明白点就是*x就代表了s的值。这样一来,s和t通过地址运算符传给被调函数地址,通过*这个间接运算符就可以使用s和t的值了。

       再来解释下地址运算符和间接运算符:*a或者*0xef098ea代表着一个变量或者一个地址在内存中存储的值,&a的意思就是a这个变量的地址。形象的说要寻找一个走散的人,你需要的是抓住他的某些重要特征(类似地址)而不是他的所有信息,如何找到这些重要的信息呢,得先去公安局(类似指针)查他的一些档案和记录,这样就可以找到失散的那个人。
      指针变量的使用:(1)声明(2)绑定地址(3)引用。例子如下:

int *p;//声明

p=&a;//绑定

*p=a;//引用



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值