下面两张写法都可以实现:
第一种是直接对传递过来的指针指向的内存空间地址进行操作赋值,这个时候注意,传过来的时候就要预留好空间,保证这个空间在你使用它之前不会被释放,也可以不用new,这里就是一个到main函数结尾才会被释放的空间,也是可以的,(C++存放在栈里的变量的作用域范围是花括号);
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
struct PDWS
{
PDWS(){TOA = 0;PW = 0;}
PDWS(double toa,float pw){TOA = toa;PW = pw;}
double TOA;
float PW;
};
void fun(PDWS *& p,int &len)
{
p[0] = PDWS(1,2);
p[1] = PDWS(3,4);
p[2] = PDWS(5,6);
len = 3;
}
int main()
{
PDWS temp[3];
PDWS *p = temp;
int len;
fun(p,len);
for (int i=0 ;i<len;i++)
{
qDebug()<<p[i].TOA<<" "<<p[i].PW;
}
return 0;
}
第二种,直接让传过来的指针指向一个在他需要被使用的时候不会被释放的空间,比如第二个程序中,就是一个全局变量PDWS p[3];当然如果这个函数是想要让其他的程序可以直接调用,可以具体创建一个提供方法的类,在类里面new一个空间出来,在这个类的析构函数里delete p;p = NULL;释放,这样别的程序在调用它的时候,只要保证在需要访问数据的时候这个类的对象还没有被释放就可以了。
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
struct PDWS
{
PDWS(){TOA = 0;PW = 0;}
PDWS(double toa,float pw){TOA = toa;PW = pw;}
double TOA;
float PW;
};
PDWS p[3];
void fun(PDWS *& temp,int &len)
{
p[0] = PDWS(1,2);
p[1] = PDWS(3,4);
p[2] = PDWS(5,6);
temp = p;
len = 3;
}
int main()
{
// PDWS temp[3];
PDWS *temp;
int len;
fun(temp,len);
for (int i=0 ;i<len;i++)
{
qDebug()<<temp[i].TOA<<" "<<temp[i].PW;
}
return 0;
}