C++ 指针作为函数参数,传的是指针变量的值

指针,确实是一个有趣味的东西。

指针:

1它是别的变量地址

2它自己却又是一个变量,它可以被赋予不同的(表示不同变量的地址)

隔着一层,有时候确实会产生一些令人误解的、区分不明的东西。

函数能够改变 的 是地址代表的量,或者 量本身(引用)。

下面,开始例证讨论。

从交换数据开始,

void swap(int a, int b) 
{
	int t=a;
	a=b;
	b=t;
}

大家都知道,传值引用,肯定换不过来。

伟大的指针出来了,

void swap(int *a, int *b) 
{
	int t=*a;
	*a=*b;
	*b=t;
}

如愿以偿,交换成功。才学的时候,觉得真是神奇吗,这个指针,厉害。

就是*太多了,烦得人不轻。人家强大呀,受着呗。

然后,有了这样一个问题:一个函数,为一个指针分配空间。如下:

#include <iostream>
using namespace std;
void create(int *, int);

int main()
{
   int *a = NULL, len=10;
   create(a,len);
   for( int i = 0; i<len; i++ )
   		cout << a[i] << "   ";
   cout << endl;
   delete []a;
   a = NULL;
}

void create(int *ap, int n)
{
    ap=new int[n];
    for(int i=0; i<n; i++) ap[i]=i;
}

感觉可以的,程序运行不如预期,返回错误值。有问题,有严重的问题。

有啥子问题呢?指针也是一变量,传值过去了,函数内部的改变无效!

当ap是一个有效地址的时候,对*ap的改变,对地址存储内容的改变是有效的。

当ap是一个地址变量时,对ap值本身((指向的地址)的改变,不能返回到函数以外。

那么使用地址吧。

真是不好表达呀。一个存放内容 为 分配空间地址的量,这要是一个二级的指针。想着都烦。如下:

#include <iostream>
using namespace std;
void create(int **, int);

int main()
{
int *a = NULL, len=10;
   create(&a,len);
   for( int i = 0; i<len; i++ )
   		cout << a[i] << " ";
   cout << endl;
   delete []a;
   a = NULL;
}

void create(int **ap, int n)
{
*ap=new int[n];
for(int i=0; i<n; i++) (*ap)[i]=i;
}

直接使用指针变量本身(引用),将是一个更易于表达的方式。

#include <iostream>
using namespace std;
void create(int *&, int);

int main()
{
int *a = NULL, len=10;
   create(a,len);
   for( int i = 0; i<len; i++ )
   		cout << a[i] << " ";
   cout << endl;
   delete []a;
   a = NULL;
}

void create(int *&ap, int n)
{
ap=new int[n];
for(int i=0; i<n; i++) ap[i]=i;
}

实现了想法。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值