子程序返回值的问题
各位好!
请问C/C++中子程序的返回值的个数有限制吗?如何才能实现一个子程序返回多个不同类型的值呢?(数组,指针型返回值除外)。
问题点数:20、回复次数:11Top
1 楼danceflash(Wine)回复于 2003-02-02 15:55:36 得分 0
在参数列表中使用指针(C/C++)或者引用型(C++)参数,可以达到多个返回值的目的Top
2 楼DaNiao(鸿雁)回复于 2003-02-02 15:59:09 得分 15
严格的讲只能返回一个,或者不返回,但聪明的你肯定是不甘心这样的
所以你有几种选择:
1.返回一个结构:
class AResult
{public:
int a;
float b;
bool c;
};
AResult A()
{
...
}
2.用指针或引用从接口带出
void f(int &a); //void ?
{
a++;
}
int main()
{
int a;
f(a);
}
3.直接操作全局变量,或类的成员变量
class A
{
public:
void a();
void b();
private:
int x;
}
void A::a()
{
x = 0;
b();
cout<<x;
}
void A::b()
{
x++;
}Top
3 楼sttony(冥界来客)回复于 2003-02-02 16:09:36 得分 5
一般采用 HRESULT youFun( type *ParIn, type *ParOut)Top
4 楼snowman_pc(cpp)回复于 2003-02-02 16:10:04 得分 0
C/C++中函数只返回一个值,
也就是说函数的参数采用值传递,但你可以通过采用指针地址做为参数,产生地址传递,这样既可产生多值!
void example(int *a,char *b);
main()
{
int dd=1;
int *num=dd;
char *ch="abcd";
example(num,ch);
printf("%d,%s",*num,ch);
}
void example(int *a,char *b)
{
*a=30;
b="34567";
}
这个是例子,我没有编译,有错误之外,请见谅, 大概就是这个意思Top
5 楼wujievc(小小)回复于 2003-02-02 16:16:33 得分 0
to DaNiao:
Good idea!Thank you all the same!Top
6 楼wujievc(小小)回复于 2003-02-02 16:25:17 得分 0
多谢大家见教!
小小这个帖子的困惑在于C/C++中是否只有通过地址传递的方法才能处理多个参数传递的问题。假如程序中要传递的参数的地址不连贯呢?或者要传递的参数的类型各不相同呢?
请大家继续发言。Top
7 楼fastzch(红领巾)回复于 2003-02-02 16:35:28 得分 0
一般来说,如果用一个数组加指针的方法来存储返回值是不会出现不连续存放的现象的,不过即便是不连续也是有办法解决的!当然要传递参数的类型不相同,最好是用指针的方法或者是引用的方法。Top
8 楼wujievc(小小)回复于 2003-02-02 16:35:47 得分 0
to sttony:
可以给个示例吗?Top
9 楼Frank001(Frank)回复于 2003-02-02 16:36:16 得分 0
结构型也可以啊,楼上有一位已经说了,把你需要传递的各个参数设计成一个结构型的。Top
10 楼wujievc(小小)回复于 2003-02-02 16:41:32 得分 0
有点明白了,看来小小有点钻牛角尖了,多谢各位!Top
11 楼sttony(冥界来客)回复于 2003-02-04 13:50:10 得分 0
可以参考, DX SDK 其中的函数的原型Top




