|
|
发表于 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++程序员一般不采用 |
|