概述
在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;
}
转自:
http://blog.csdn.net/zd0303/article/details/6437535
最后
以上就是时尚红牛为你收集整理的C++函数传出参数的全部内容,希望文章能够帮你解决C++函数传出参数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复