函数输出值是数组

minggao818 2010-07-27 11:26:29
例如编写一个函数:void function(POINT Start_point , 输出是一连串的点),请问:想在主函数调用function时,得到一连串的输出点,最好可以用数组来存储,请给点意见?
...全文
175 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyz007134 2010-07-27
  • 打赏
  • 举报
回复

// 函数随机生成5个点,然后传出
#include <iostream>
#include <ctime>
using namespace std;
const int len = 5;
typedef struct
{
int x;
int y;
void show()
{
cout << "(" << x << " , " << y << ")" << endl;
}
}point;

point* GetRandomPoint(int) // 这个函数因为返回了临时数组ptArr,函数结束时,ptArr内存被回收,导致结果不正确
{
srand((unsigned)time(NULL));
point ptArr[len];
int x, y;
for (int i = 0; i < len; ++i)
{
x = rand() % 50;
y = rand() % 50;
ptArr[i].x = x;
ptArr[i].y = y;
}
return ptArr;
}

point* GetRandomPoint() // 这个函数返回了动态分配的数组,程序主程序退出前或者手动delete前,这段内存一直存在
{
srand((unsigned)time(NULL));
point* ptArr = new point[len];
int x, y;
for (int i = 0; i < len; ++i)
{
x = rand() % 50;
y = rand() % 50;
ptArr[i].x = x;
ptArr[i].y = y;
}
return ptArr;
}

int main()
{
point* pt = GetRandomPoint(); // 这里括号随便填个整形参数,就能调用错误的函数
for (int i = 0; i < len; ++i)
pt[i].show();
delete[] pt; // 这里别忘了delete
return 0;
}
minggao818 2010-07-27
  • 打赏
  • 举报
回复
wyz007134,能不能详细说说返回的情况,最好能写出一些举例代码来?
alijialia 2010-07-27
  • 打赏
  • 举报
回复
void function(POINT Start_point , 输出是一连串的点),如果有指针的话,直接POINT * function(POINT *String){},函数里面,返回值为String的头结点。
wyz007134 2010-07-27
  • 打赏
  • 举报
回复
你是要输出,还是返回?
如果输出的话,就在函数里声明一个点结构(或者类)的数组,赋值完成后遍历数组输出即可。

如果返回的话,那么可以通过参数传入一个点结构(或者类)的数组(指针),然后通过对该数组(指针)进行赋值,就相当于把点的信息存入了数组了。

或者把数组(或指针)作为函数内部的参数,赋值后返回。切忌这里的内部参数要用动态内存(即new),否则函数执行完成,临时数组的空间将被回收。

动态内存通过返回值的指针赋值给外部的指针变量,最后delete[]这个指针变量即可达到内存的回收。
ayw215 2010-07-27
  • 打赏
  • 举报
回复
void function(POINT Start_point,PIONT* PAARAY)
在function里面操作paaray

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧