游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2010|回复: 5

函式要return一???列,要如何??

[复制链接]

414

主题

611

帖子

621

积分

高级会员

Rank: 4

积分
621
发表于 2007-8-7 14:19:00 | 显示全部楼层 |阅读模式
VC++,函式要return一???列,要如何???
我??好像只能像以下??????
CPoint* fun1(CPoint a[],int &nCount)
{
return a;
}

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2007-8-7 15:08:00 | 显示全部楼层

Re:函式要return一???列,要如何??

你这个函式倒没有什么大问题。只是第二个参数是int&,没什么必要性,直接用int就可以了。
2种情况返回阵列要注意:
1
CPonint* func1()
{
    CPonint p[100];
    return p;
}
错误,因为阵列p是在栈内存区,出了函式后,这个p就没有,返回的指针再使用时已经无效,被称为野指针,会引发错误以至于程序崩溃。(VC8中会给出一个warning C4172提示有问题)
2
CPonint* func2()
{
    CPonint* p;
    p = new CPonint[100];
    return p;
}
正确,因为p是由new得到的,是在堆内存中申请的一段内存,不会随函式消失,但需要编码者自行维护这段内存,在不再使用时要记得delete[]掉,不然这段内存就会一直存在,严重时会造成系统内存消耗殆尽。

另外还可以将阵列做成一个类进行封装,函式返回时不返回地址,而返回这个封装类的一个实例变量,这样就做可以如同普通的类型(int等)一样进行返回,但效率比较低(返回时做了一次对象COPY),关乎效率的情况下C/C++程序员一般不采用

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2007-8-8 08:37:00 | 显示全部楼层

Re:函式要return一???列,要如何??

CPoint* fun1(CPoint a[],int &nCount)
{
return a;
}
如果总是传回a,就根本不需要返回,本来就不是传值进来的。如果一定要个返回值,就这么写吧。

5

主题

755

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2007-8-8 11:53:00 | 显示全部楼层

Re:函式要return一???列,要如何??

最好直接写 void 在里面用地址传递,改好了也等于return了呵呵

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-8-8 12:46:00 | 显示全部楼层

Re:函式要return一???列,要如何??

如果不是要等式、链式表达式,多值最好不要这样返回,直接用参数输入输出才是简便且不易出错的。

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2007-8-8 16:53:00 | 显示全部楼层

Re:函式要return一???列,要如何??

= =
弄错了一个小地方,int&还是和int不一样的,int&会使参数在函数体内被修改,但习惯上多值返回用int*这样的传,而const CPoint&这样的参数形式作为传对象级别的参数,以避免传值时做得对象复制带来的消耗(const避免编码者手误把这个对象引用在函数体中给改动了),这是通行的习惯,要遵守。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 13:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表