C++函数传出参数

C++函数传出参数

日积月累-编程 2010-12-13 23:37:14 阅读120 评论0   字号:   订阅

     在C++中,函除了用return返回参数之外,还可以在指针做为参数传出参数.看下面一个小例子:

#include<iostream>
using namespace std;

int test(int *arr,int* count)
{
int i = 0;
for(i ; i < 5 ; ++i)
{
arr[i] = i;
}
*count = i;
return i;
}

int main()
{
int arr[5] = {0};
int num;
test(arr,&num);
for(int i = 0; i < num; i++)
{
cout << arr[i] <<endl;
}
system("pause");
return 0;
}
    从上面代码可以看出test有二个指针参数,都是做为函数输出用的.
    第一个参数是指针型,也可以看做是一个一维数组首地址,将数组的首地址传入,当对其进行操作时,就相当于操作数原数组,所以,在函数里面改变数组的值时,做为参数的数组值也会发生改变.
   第二个参数也是指针,但在这里传入的是一个整型变量的地址,函数中count指向的是整型num变量所在的地址,改变*count值时就改变了num变量的值.
   对于一般的类型和数组都可以这样在函数中输出.但对于字符串char*,做为输出时需要用char**.如
#include<iostream>
using namespace std;

void test1(char* str)
{
str = "guoke";
}
void test2(char** str)
{
*str = "guoke";
}

int main()
{
char *s = "abc";
test1(s);
cout << s << endl;  // 输出 abc
test2(&s);
cout << s << endl;  // 输出guoke

system("pause");
return 0;
}
函 数 test1 的修改之所以无效,是应为 "指针(引用)本身同样是按值拷贝传递的".也就是说 test1 中修改的只是复制后的指针内容,与 main 中的实参指针 s 并无关联.要修改实参指向,就必须传递实参原始地址,而非复制后的地址.在test2中,当两个指针(引用)指向同一个对象时,我们可以修改对象成员,但 指向新对象后,就断了这种关联,这样就可以达到修改的目的了.

PS:对于参数传出也可以用&,如void test(int &count);这样也能达到传出的效果,但个人让为&多用于函数传入时引用,对于传出还是用*的比较好.用*可以设计缺省值,而&确不能.如:
#include<iostream>
using namespace std;

int test(int *arr,int* count = NULL)
{
int i = 0;
for(i ; i < 5 ; ++i)
{
arr[i] = i;
}
if(count)
*count = i;
return i;
}

int main()
{
int arr[5] = {0};
int num = test(arr);
for(int i = 0; i < num; i++)
{
cout << arr[i] <<endl;
}

system("pause");
return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值