当前位置:   article > 正文

C++函数传出参数_c++ 出参

c++ 出参
 在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;
}
 
 
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/798323
推荐阅读
相关标签
  

闽ICP备14008679号