指针简单介绍以及指针作为函数参数的例子

变量存放在内存中分配的一个空间,指针指向变量所在的空间地址

int a;
int *p=&a;

其中int * 为指针类型,p为指针变量,存放地址,*p为该地址存放的数据;


当指针用于函数参数时,视为把变量地址传入函数。函数内直接通过地址找到要修改的存储位置,进行里面值的修改,因此函数内进行的修改是有效的。

例如通过函数实现2个值的交换

swap ( int a , int b )
{
    int temp=a;
    a=b;
    b=temp;

}
调用此函数输出,无效;

通过指针可实现其效果:

swap ( int *a , int *b )
{
    int temp=*a;
    *a=*b;
    *b=temp;

}


调用此函数,有效,main函数中进行调用

int main ( )
{
  int x=3;
  int y=2;
  swap(&x, &y);
  printf("x=%d        y=%d\n",x,y);
  return 0;
}


结果输出为x=2         y=3,此处函数参数传入的是地址值。

交换值的函数也有错误的写法

错误1:

swap ( int *a , int *b )
{
 int *temp;
 *temp=*a
 *a=*b;
 *b=*temp;

}

这种写法看似好像是没有错误,可是呢,犯了一个很容易被忽视的错误:指针没有初始化,此处temp没被初始化,temp中存放的地址是随机的,若该随机地址是系统工作区间,那就会出错(大概率事件)。修改:初始化temp;

错误2 

swap ( int *a , int *b )
{
 int *temp=a;
 a=b;
 b=temp;

}

此方法试图直接交换地址来交换值,然而此方法无效,两数的值并为交换,函数参数传入地址值,地址其实也是一个数字,ab的地址,两个数字产生副本,函数内只是交换两个副本值,如果这样,那就和上面第一个写法一样啦。


顺便再说引用:引用是c++里的,引用不产生副本,而是起别名,因此对引用变量的操作其实就是对源变量的操作,&引用并不是取地址,同一个粒子如下!

swap ( int &a , int &b )
{
 int temp=a;
 a=b;
 b=temp;

}







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值